我提供了一项服务来创建一个系统覆盖(按钮)来检测长按此处是我的代码:
public class myservice extends Service implements OnTouchListener {
WindowManager wm;
View myview;
LayoutInflater li;
Button b;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("\n=\n=\n=\n" + "oncreate service" + "\n=\n=\n=\n");
li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
//WindowManager.LayoutParams.TYPE_INPUT_METHOD |
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY |
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
//WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
System.out.println("\n=\n=\n=\n" + "lp " + params + "\n=\n=\n=\n");
params.gravity = Gravity.CENTER;
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
myview = li.inflate(R.layout.test_layout, null);
System.out.println("\n=\n=\n=\n" + "View inflated" + "\n=\n=\n=\n");
System.out.println("\n=\n=\n=\n" + "Layout inflator = " + li + "\nWindow manager = " + wm + "\nparams = " + params + "\nView = " + myview + "\n=\n=\n=\n");
myview.setOnTouchListener(this);
System.out.println("\n=\n=\n=\n" + "On touch listener" + "\n=\n=\n=\n");
wm.addView(myview, params);
System.out.println("\n=\n=\n=\n" + "add view" + "\n=\n=\n=\n");
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
wm.removeView(myview);
myview=null;
}
@Override
public boolean onTouch(View arg0, MotionEvent event) {
// TODO Auto-generated method stub
System.out.println("\n=\n=\n=\n Inside On Touch method \n=\n=\n=\n");
if(event.getAction()==MotionEvent.ACTION_DOWN) {
Toast.makeText(getApplicationContext(), "Press", Toast.LENGTH_SHORT).show();
System.out.println("\n=\n=\n=\ntouch " + event.getX() + " " + event.getY() + "\n=\n=\n=\n");
return true;
}
return false;
}
除了用户按下按钮之外,应该允许用户正常使用手机。但我注意到后退按钮不起作用,我的手机上的列表视图(如联系人,闹钟,消息,whatsapp的列表)不再可点击。当我点击列表项时,它显示正常动画,但没有任何东西打开。
我试图找到错误并找到了。
图标正常工作,它只是后退按钮和列表视图。为什么?我该如何纠正呢?
答案 0 :(得分:0)
TYPE_SYSTEM_ALERT
而非TYPE_SYSTEM_OVERLAY
(不再接收来自4.3的点击)从我的评论中可以看出,我还使用了许多帖子中的类似示例代码来说明如何执行此操作。出于某种原因,BACK按钮停止工作(在2台设备上)。
现在它正在运作 - 遗憾的是我不知道修复的是什么:
我将onTouch()
的回复率从false
更改为true
,然后又回来了。
我之前为params
分配了一个标题,但我把它拿出来了。
但是现在我似乎无法再次打破按钮,无论我做什么。遗憾的是 - 我想知道如何在系统范围内禁用BACK按钮。
对我而言,这表明了做一个干净的& amp;重建你的项目。或者这可能是因为我们使用“hacks”来做叠加事物。
BTW这些名单也在重新开始。对不起,我无法提供更多帮助。