我想在用户在屏幕上的任何位置滑动时获得反馈。我找到了一些使用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;
}
});
关于添加新布局时可能发生的变化的任何想法都非常受欢迎!
答案 0 :(得分: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 .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;
}
});
我希望这可以帮助你。让我知道结果。
答案 1 :(得分: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
子项添加一个监听器,因为当时只有一个选项卡处于活动状态。
我觉得有多个不同的元素监听同一个事件以触发菜单弹出有点不自觉?所以,如果可能的话,我希望听到关于如何更“干净”地解决这个问题的建议。