布局更改后onTouchListener不起作用

亚历山大·菲姆雷特

当用户在屏幕上的任意位置滑动时,我希望获得反馈。我找到了一些使用onTouchListener做到这一点的代码。而且有效。今天,我对UI设置进行了一些重做,并添加了许多新的布局来更好地组织它。但是我的onTouch事件再也不会触发!

我的猜测是,某些布局可能会重叠并窃取事件。但是我没有成功尝试在xml中使用以下参数。

android:clickable="false"
android:focusable="false"
android:touchscreenBlocksFocus="false"
android:visibility="invisible"

这是在onCreate中运行的代码:

View window = getWindow().getDecorView();
window.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        System.out.println("YEY! A TOUCH EVENT!");
        return true;
    }
});

RelativeLayout tab1 = (RelativeLayout) findViewById(R.id.layTab1);
tab1.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        System.out.println("YEY! A TOUCH EVENT!");
        return true;
    }
});

关于添加新布局时可能发生的更改的任何想法都非常有用!

亚历山大·菲姆雷特

经过大量的故障排除后,我终于弄清楚问题出在哪里。我的布局层次结构如下:

- activity_main (RelativeLayout)
--- layTab1 (RelativeLayout)
----- (ScrollView)
------- layTab1View (LinearLayout)
--------- (STUFF FOR THIS TAB)
--- layTab2 (RelativeLayout)
----- (ScrollView)
------- layTab2View (LinearLayout)
--------- (STUFF FOR THIS TAB)

我试图从activity_main布局中获取事件直到我添加了ScrollView显然,ScrollView消耗器消耗了所有触摸事件。要变通解决此问题。我必须为的所有LinearLayout项添加一个侦听器,ScrollView因为当时只有一个选项卡处于活动状态。

我怎么感觉到有多个不同的元素侦听同一事件以触发菜单弹出窗口是不必要的?因此,如果有可能,我很乐意听到有关如何更“干净”地解决此问题的建议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章