Поймать событие 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);