【问题标题】:AppWidgetHostView touch events not working properlyAppWidgetHostView 触摸事件无法正常工作
【发布时间】:2018-01-26 19:15:49
【问题描述】:

如您所知,AppWidgetHostView 不能很好地处理长按,并且在使用 registerForContextMenu(host view) 时它不会打开。

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

但副作用很糟糕,不是因为我的代码,而是因为 AppWidgetHostView 的结构以及触摸事件的传递方式和处理方式取决于小部件的性质而不是我的代码。

例如,下面的代码在点击(时钟数字)小部件时触发向下和向上事件,顺便说一下,它没有附加的活动。但是(日历)小部件不会触发向下和向上事件,而是会打开日历活动。

因此,与数字时钟不同,日历小部件使用事件。

如果您考虑过 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,我分别尝试了每一个。

【问题讨论】:

    标签: android


    【解决方案1】:

    我在使用openlauncher 时遇到了同样的问题。我开始研究系统应用小部件,发现在calendar widget 中添加了

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

    小部件布局很有帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多