布局更改后onTouchListener无法正常工作

问题描述 投票:0回答:2

当用户在屏幕上的任何位置滑动时,我想获得反馈。我找到了一些使用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;
    }
});

关于添加新布局时可能发生的变化的任何想法都非常感谢!

android-layout android-studio ontouchlistener
2个回答
0
投票

您可以尝试使用frame layout创建您的布局设计,如下所示:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <View
        android:id="@+id/view_main"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:scaleType="matrix"/>

//Your Layout design

</FrameLayout>

并在代码中生成view_main .setOnTouchListener。其他布局设计现在无法通过这种方式窃取touchlistener事件..

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

我希望这可以帮助你。让我知道结果。


0
投票

经过多次故障排除后,我终于弄明白了问题是什么。我的布局层次结构如下:

- 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孩子添加一个监听器,因为当时只有一个选项卡处于活动状态。

我觉得有多个不同的元素听同一事件来触发菜单弹出有点不自觉?所以,如果可能的话,我很想听听关于如何更“干净”地解决这个问题的建议。

© www.soinside.com 2019 - 2024. All rights reserved.