后退按钮和列表视图不在服务中?

时间:2013-10-24 20:07:11

标签: 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 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的列表)不再可点击。当我点击列表项时,它显示正常动画,但没有任何东西打开。

我试图找到错误并找到了。

  1. 当我添加TYPE_SYSTEM_ALERT时,问题仍然存在。
  2. 当我添加TYPE_SYSTEM_OVERLAY,而不使用TYPE_SYSTEM_ALERT时,问题就消失了,但现在按钮不可点击,就像永久性图像卡住而没有任何用处(不是我想要的)。
  3. 图标正常工作,它只是后退按钮和列表视图。为什么?我该如何纠正呢?

1 个答案:

答案 0 :(得分:0)

  1. 使用TYPE_SYSTEM_ALERT而非TYPE_SYSTEM_OVERLAY(不再接收来自4.3的点击)
  2. 不要将OR窗口类型放在一起 - 这不是它们的工作方式。

  3. 从我的评论中可以看出,我还使用了许多帖子中的类似示例代码来说明如何执行此操作。出于某种原因,BACK按钮停止工作(在2台设备上)。

    现在它正在运作 - 遗憾的是我不知道修复的是什么:

    • 我将onTouch()的回复率从false更改为true,然后又回来了。

    • 我之前为params分配了一个标题,但我把它拿出来了。

    但是现在我似乎无法再次打破按钮,无论我做什么。遗憾的是 - 我想知道如何在系统范围内禁用BACK按钮。


    对我而言,这表明了做一个干净的& amp;重建你的项目。或者这可能是因为我们使用“hacks”来做叠加事物。

    BTW这些名单也在重新开始。对不起,我无法提供更多帮助。