从Android中的WindowManager添加View中的onTouch或onClick事件

时间:2013-04-10 02:11:12

标签: android onclick ontouchevent android-windowmanager

我已经坚持了几天的问题,我的谷歌搜索开始乱用可能的解决方案。我正在尝试创建一个类添加一个View并接收onTouch事件或onClick事件,就像UndoBar库一样。问题是除非我将View添加到ViewGroup而不是WindowManager,否则永远不会调用onTouch / onClick事件。这是我下面的非工作代码:

    final LayoutInflater mLayoutInflater = (LayoutInflater) 
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    final View mView = mLayoutInflater
            .inflate(R.layout.test, null);


    final TextView clickTextView = (TextView) 
            mView.findViewById(R.id.clickTextView);  


    WindowManager mWindowManager = (WindowManager)
            context.getSystemService(Context.WINDOW_SERVICE);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams();

    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;

    params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

    params.format = PixelFormat.TRANSLUCENT;      
    params.type = WindowManager.LayoutParams.TYPE_TOAST;

    mWindowManager.addView(mView, params);

    clickTextView.setOnTouchListener(new OnTouchListener() 
    {

        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {

            Log.i("onTouch", "onTouch has been called");

            return false;

        }
    });

}

请注意:此处传递的上下文是活动上下文。

要使此代码正常工作,我需要获取Activity的根布局并将View添加到该代码中。我的问题,这可能是一个菜鸟问题,为什么我不能获得添加到WindowManager的View事件的onTouch / onClick?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是使这项工作的代码,但仍然没有找到我的问题的解释。

    final View mView = mLayoutInflater
            .inflate(R.layout.test, activityViewGroup, false);

    activityViewGroup.addView(mView);