Поймать событие onTouch или onClick из View, добавленного WindowManager в Android

Я застрял на проблеме в течение нескольких дней, и мои поиски Google начали исчерпывать возможные решения. Я пытаюсь создать класс, который добавляет View и получает события onTouch или onClick, очень похожие на библиотеку UndoBar. Проблема в том, что события onTouch / onClick никогда не вызываются, если я не добавлю View в ViewGroup вместо WindowManager. Вот мой нерабочий код ниже:

    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. Мой вопрос, и это может быть нубский вопрос, почему я не могу получить onTouch / onClick для события View, которое вместо этого добавляется в WindowManager?

Спасибо за любую помощь.

1 ответ

Решение

Вот код, чтобы сделать эту работу, но до сих пор не нашел объяснения моему вопросу.

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

    activityViewGroup.addView(mView);
Другие вопросы по тегам