我正在尝试使用视图以编程方式执行单击。
如果它是按钮、文本或列表,我可以在普通 UI 上实现此目的。
这是我的代码..
element.GetView().getRootView().dispatchTouchEvent(mMotionEvent);
在正常窗口的情况下,这工作正常。 但是当涉及到对话框列表和菜单项时,它不起作用
我正在尝试使用视图以编程方式执行单击。
如果它是按钮、文本或列表,我可以在普通 UI 上实现此目的。
这是我的代码..
element.GetView().getRootView().dispatchTouchEvent(mMotionEvent);
在正常窗口的情况下,这工作正常。 但是当涉及到对话框列表和菜单项时,它不起作用
这是类名,其中包含附加到对话框的单选按钮列表。
androidx.appcompat.app.AlertController$RecycleListView
这是类名,其中包含附加到对话框的菜单项列表。
android.widget.PopupWindow$PopupBackgroundView
我曾经使用点击事件来检查应用程序的空闲状态。我希望这个解决方案有帮助。
要处理触摸事件,您可以创建自定义对话框窗口回调。
class UserInteractionAwareCallback(
private val wrapped: Callback,
private val onUserInteraction: () -> Unit
) : Callback{
override fun dispatchKeyEvent(p0: KeyEvent?): Boolean {
return wrapped.dispatchKeyEvent(p0)
}
override fun dispatchKeyShortcutEvent(p0: KeyEvent?): Boolean {
return wrapped.dispatchKeyShortcutEvent(p0)
}
override fun dispatchTouchEvent(p0: MotionEvent?): Boolean {
if(p0?.action == MotionEvent.ACTION_DOWN){
onUserInteraction.invoke()
}
return wrapped.dispatchTouchEvent(p0)
}
override fun dispatchTrackballEvent(p0: MotionEvent?): Boolean {
return wrapped.dispatchTrackballEvent(p0)
}
override fun dispatchGenericMotionEvent(p0: MotionEvent?): Boolean {
return wrapped.dispatchGenericMotionEvent(p0)
}
override fun dispatchPopulateAccessibilityEvent(p0: AccessibilityEvent?): Boolean {
return wrapped.dispatchPopulateAccessibilityEvent(p0)
}
override fun onCreatePanelView(p0: Int): View? {
return wrapped.onCreatePanelView(p0)
}
override fun onCreatePanelMenu(p0: Int, p1: Menu): Boolean {
return wrapped.onCreatePanelMenu(p0, p1)
}
override fun onPreparePanel(p0: Int, p1: View?, p2: Menu): Boolean {
return wrapped.onPreparePanel(p0, p1, p2)
}
override fun onMenuOpened(p0: Int, p1: Menu): Boolean {
return wrapped.onMenuOpened(p0, p1)
}
override fun onMenuItemSelected(p0: Int, p1: MenuItem): Boolean {
return wrapped.onMenuItemSelected(p0, p1)
}
override fun onWindowAttributesChanged(p0: WindowManager.LayoutParams?) {
wrapped.onWindowAttributesChanged(p0)
}
override fun onContentChanged() {
wrapped.onContentChanged()
}
override fun onWindowFocusChanged(p0: Boolean) {
wrapped.onWindowFocusChanged(p0)
}
override fun onAttachedToWindow() {
wrapped.onAttachedToWindow()
}
override fun onDetachedFromWindow() {
wrapped.onDetachedFromWindow()
}
override fun onPanelClosed(p0: Int, p1: Menu) {
wrapped.onPanelClosed(p0, p1)
}
override fun onSearchRequested(): Boolean {
return wrapped.onSearchRequested()
}
override fun onSearchRequested(p0: SearchEvent?): Boolean {
return wrapped.onSearchRequested(p0)
}
override fun onWindowStartingActionMode(p0: ActionMode.Callback?): ActionMode? {
return wrapped.onWindowStartingActionMode(p0)
}
override fun onWindowStartingActionMode(p0: ActionMode.Callback?, p1: Int): ActionMode? {
return wrapped.onWindowStartingActionMode(p0, p1)
}
override fun onActionModeStarted(p0: ActionMode?) {
wrapped.onActionModeStarted(p0)
}
override fun onActionModeFinished(p0: ActionMode?) {
wrapped.onActionModeFinished(p0)
}
}
在 onViewCreated 方法中创建自定义回调函数。
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
dialog?.window?.callback = UserInteractionAwareCallback(dialog?.window?.callback!!){
// Do something here
}
}