繁体   English   中英

AppWidgetHostView触摸事件无法正常工作

[英]AppWidgetHostView touch events not working properly

如您所知,AppWidgetHostView不能很好地长按,并且在使用registerForContextMenu(host view)时也无法打开。

我创建了一个自AppWidgetHostView派生的自定义主机视图,并覆盖了触摸事件以显示上下文菜单。

但是副作用很严重,这不是因为我的代码,而是因为AppWidgetHostView的结构以及基于小部件的本质(而不是我的代码)传递和处理触摸事件的方式有所不同。

例如,下面的代码在点击(Clock digital)小部件时会触发down&up事件,顺便说一下,该小部件没有附加的活动。 但是上下事件都不会使用(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,而是分别尝试了每一个。

使用openlauncher我也有同样的问题。 我开始重新研究系统应用程序小部件,并在日历小部件中发现

android:focusable="true"
android:clickable="true"

小部件的布局是有帮助的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM