Android 后退按钮,列表视图在服务中不工作?
我做了一项服务来创建一个系统覆盖(按钮),用于检测长时间的按压。这是我的代码:Android 后退按钮,列表视图在服务中不工作?,android,listview,service,Android,Listview,Service,我做了一项服务来创建一个系统覆盖(按钮),用于检测长时间的按压。这是我的代码: public class myservice extends Service implements OnTouchListener { WindowManager wm; View myview; LayoutInflater li; Button b; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated metho
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列表)也不再可点击。单击列表项时,它会显示正常动画,但不会打开任何内容
我试图找出错误并发现了
类型系统警告
而不是类型系统覆盖
(不再接收来自4.3的点击)正如您从我的评论中所看到的,我还使用了许多文章中关于如何实现这一点的类似示例代码。由于某种原因,“后退”按钮停止工作(在2台设备上) 现在它正在工作-遗憾的是,我不知道修复是什么:
- 我将
的返回值从onTouch()
更改为false
,然后再次返回true
- 我之前给
参数指定了一个标题,但我去掉了它
对我来说,这意味着对项目进行清理和重建的老把戏。或者这可能是因为我们正在使用“黑客”来做覆盖的事情
顺便说一句,这些列表也再次发挥作用。很抱歉,我无法提供更多帮助。为什么您要使用
服务
直接与UI交互?我是否可以有一个活动,可以在每次长按时检测到它?@Squonk我需要长按,我不能使用活动,因为它不会持续(用户可以关闭它,而且它并不总是在顶部,毫无意义)因此我无法使用该服务。现在,这一切有中间立场吗,或者我有办法解决这个问题吗?“……有办法解决这个问题吗?”我真的不明白你的问题是什么。用户可以在他们的设备上使用很多应用程序,但是你想在上面覆盖一些东西吗???我需要制作一个按钮,当长按该按钮时,该按钮将被激活,用户可以从手机上的任何位置访问该按钮。我已经能够制作这样一个按钮。但现在的问题是,手机上的列表视图和后退按钮不能正常工作。我试着通过点击这个名字来打电话,但它并没有点击,只是显示了一个来回的动画,就像闹钟和whatsapp联系人一样。