如您所知,AppWidgetHostView无法很好地处理长按,当使用registerForContextMenu(主机视图)时,它无法打开。
我创建了一个从AppWidgetHostView派生的自定义主机视图,并覆盖触摸事件以显示上下文菜单。
但副作用很糟糕,不是因为我的代码,而是因为AppWidgetHostView的结构以及触摸事件如何根据小部件的性质而不是我的代码传递和处理不同。
例如,下面的代码会触发&录制(时钟数字)小部件时的事件,顺便说一下,它没有附加活动。但是他们都失望了事件不会被(日历)小部件触发,而是打开日历活动。
因此,与数字时钟不同,Calendar小部件会消耗事件。
如果您考虑onInterceptTouchEvent,它会变得最糟糕和最糟糕......当我点击数字时钟小部件时,Up事件不会被触发,这会导致上下文菜单显示为长时间点击。
已经有两天的时间在阅读和阅读应用&测试,但我找不到适合所有类型小部件的解决方案。
谢谢
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch(ev.getActionMasked() ) {
case MotionEvent.ACTION_DOWN:
mDownUp = 0;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
mDownUp = 1;
break;
}
return true;
}
@Override
public boolean onInterceptTouchEvent (MotionEvent ev) {
switch(ev.getActionMasked() ) {
case MotionEvent.ACTION_DOWN:
mDownUp = 0;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
mDownUp = 1;
break;
}
return false;
}
顺便说一句,我没有同时使用/覆盖onInterceptTouchEvent和onTouchEvent,我分别尝试了每一个。
答案 0 :(得分:0)
我使用openlauncher时遇到同样的问题。我开始研究系统应用小部件,并在calendar widget中找到添加
android:focusable="true"
android:clickable="true"
到widget布局是有帮助的。