代码之家  ›  专栏  ›  技术社区  ›  Aleksander Fimreite

布局更改后onTouchListener不工作

  •  0
  • Aleksander Fimreite  · 技术社区  · 7 年前

    我想在用户在屏幕上任何地方滑动时获得反馈。我发现了一些使用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;
        }
    });
    

    对于添加新布局时可能发生的变化,我们非常感谢!

    2 回复  |  直到 7 年前
        1
  •  0
  •   Tapan Kumar Patro    7 年前

    您可以尝试使用创建布局设计 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_成为主视图。代码中的setOnTouchListner。。其他布局设计现在无法通过这种方式窃取touchlistner事件。。

    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;
        }
    });
    

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

        2
  •  0
  •   Aleksander Fimreite    7 年前

    经过多次故障排除,我终于找出了问题所在。 我的布局层次如下:

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

    我试图从 activity_main ScrollView . 显然 卷轴视图 消耗所有触摸事件。来解决这个问题。我必须在所有的 LinearLayout 的子女 因为此时只有一个选项卡处于活动状态。

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