B M*_*B M 5 android native dispatch intentservice android-windowmanager
我的应用程序界面作为Facebook聊天,所以我使用覆盖按钮.我在主要活动中使用了意向服务.我在FloatBitchService中创建了chathead ui.使用WindowManager创建UI.将float_view布局添加到WindowManager.在float_view布局中,除了butHead之外,所有控件都可见.但头部是叠加按钮.我想显示ovelay按钮单击显示其他控件.我使用onTouchevent上的覆盖按钮进行叠加按钮单击.我的错误发生在输入文本框控件中.调试设备是三星Galaxy Note 2.
更新
在Samsung Note 2 Android 4.3中,在输入文本框发短信后按Enter键显示谷歌搜索应用程序.我的应用与谷歌搜索应用程序有什么问题.
(FloatBitchService.java)
public class FloatBitchService extends Service {
@Override
public void onCreate() {
windowManager = (WindowManager)getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = LayoutInflater.from(this);
viewFloat = inflater.inflate(R.layout.float_view, null);
butHead = (Button)viewFloat.findViewById(R.id.butHead);
...........................
parameters = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, // Width
WindowManager.LayoutParams.WRAP_CONTENT, // Height
WindowManager.LayoutParams.TYPE_PHONE, // Type
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,// Flag
PixelFormat.TRANSLUCENT // Format)
);
parameters.x = 0;
parameters.y = 0;
parameters.gravity = Gravity.TOP | Gravity.LEFT;
windowManager.addView(viewFloat, parameters);
butHead.setOnTouchListener(new OnTouchListener() {
int initialX, initialY;
float initialTouchX, initialTouchY;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// Get current time in nano seconds.
initialX = parameters.x;
initialY = parameters.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
startClickTime = Calendar.getInstance().getTimeInMillis();
Toast.makeText(getApplication(), "Here to Remove", Toast.LENGTH_SHORT).show();
break;
case MotionEvent.ACTION_UP:
// Check Single Click
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if (clickDuration < MAX_CLICK_DURATION){
if (layout1.getVisibility() == View.VISIBLE) {
// isMove flag for chat head movement
isMove = true;
chatHeadClose();
}else {
// isMove flag for chat head movement
isMove = false;
chatHeadOpen();
}
}
Display display = windowManager.getDefaultDisplay();
Point point = new Point();
display.getSize(point);
screenWidth = point.x;
screenHeight = point.y;
// Dictionary Panel size set to fix screen size
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)layout1.getLayoutParams();
params.width = screenWidth;
params.height = (int)(screenHeight * 0.68);
// Calculate for Delete Space [ * ]
int screenWidthHalf = screenWidth / 2;
int rightValue = screenWidthHalf + 100;
int leftValue = screenWidthHalf - 100;
int headwidth = butHead.getWidth() / 2;
// float item close when arrive screen bottom
if (parameters.y > (screenHeight - 450) && (parameters.x + headwidth) > leftValue && (parameters.x + headwidth) < rightValue) {
viewFloat.setVisibility(View.GONE);
Toast.makeText(getApplication(), "Removed!",Toast.LENGTH_SHORT).show();
stopSelf();
}
break;
case MotionEvent.ACTION_MOVE:
if (isMove) {
// chathead movement
parameters.x = initialX + (int) (event.getRawX() - initialTouchX);
parameters.y = initialY + (int) (event.getRawY() - initialTouchY);
windowManager.updateViewLayout(viewFloat, parameters);
}
break;
}
return false;
}
});
}
private void chatHeadOpen()
{
parameters = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, // Width
WindowManager.LayoutParams.WRAP_CONTENT, // Height
WindowManager.LayoutParams.TYPE_PHONE, // Type
WindowManager.LayoutParams.FLAG_BLUR_BEHIND,// Flag
PixelFormat.TRANSLUCENT // Format)
);
parameters.x = 0;
parameters.y = 0;
parameters.gravity = Gravity.TOP | Gravity.LEFT;
windowManager.removeView(viewFloat);
windowManager.addView(viewFloat, parameters);
layout1.setVisibility(View.VISIBLE);
}
private void chatHeadClose(){
parameters = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT, // Width
WindowManager.LayoutParams.WRAP_CONTENT, // Height
WindowManager.LayoutParams.TYPE_PHONE, // Type
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,// Flag
PixelFormat.TRANSLUCENT // Format)
);
parameters.x = 0;
parameters.y = 0;
parameters.gravity = Gravity.TOP | Gravity.LEFT;
windowManager.removeView(viewFloat);
windowManager.addView(viewFloat, parameters);
layout1.setVisibility(View.GONE);
}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |