几天来我一直被一个问题所困扰,我的 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;
}
});
}
请注意:这里传递的Context是一个Activity Context。
为了使这段代码正常工作,我需要获取 Activity 的根布局并将 View 添加到其中。我的问题,这可能是一个菜鸟问题,为什么我不能获取添加到 WindowManager 的 View 事件的 onTouch/onClick?
感谢您的帮助。
最佳答案
这是实现此功能的代码,但仍然没有找到对我的问题的解释。
final View mView = mLayoutInflater
.inflate(R.layout.test, activityViewGroup, false);
activityViewGroup.addView(mView);
关于android - 从 Android 中 WindowManager 添加的 View 中捕获 onTouch 或 onClick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915751/