在我的应用程序中禁用多指触摸[重复]
Posted
技术标签:
【中文标题】在我的应用程序中禁用多指触摸[重复]【英文标题】:Disable multi finger touch in my app [duplicate] 【发布时间】:2012-09-28 10:48:46 【问题描述】:我的应用使用一个 Activity 来托管多个片段。每次在手机屏幕上显示一个片段。每个片段的视图由几个图像图标组成。
目前,用户可以用两根手指同时按下两个图标(每个手指按下一个图标)。 我想在我的应用上禁用此多点触控功能,以允许一次只按下一个图标。
我尝试了以下方法:
方式 1: 在我的应用主题中,我添加了:
<item name="android:windowEnableSplitTouch">false</item>
方式2:在Android Manifest xml中,我添加了:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
方式 3: 在我的 Activity 中:
@Override
public boolean onTouchEvent(MotionEvent event)
if(event.getPointerCount() > 1)
System.out.println("Multitouch detected!");
return true;
else
return super.onTouchEvent(event);
很遗憾,我的解决方案都不起作用。那么,如何在我的应用中禁用多点触控功能?
【问题讨论】:
尝试将android:splitMotionEvents="false"
添加到您的 ParentView 而不是应用主题。不确定是否有任何差异,但在我的应用程序上,它可以工作。
我试过了,对我也不起作用
iosdev03.medium.com/…
【参考方案1】:
对于案例:您有多个按钮,并且您只想选择一个按钮。 在父级(不是根,只是子级的父级)按钮,在其 xml 参数中添加
android:splitMotionEvents="false"
就是这样。 示例:
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
android:splitMotionEvents="false" <-----------!!!
>
<Button
android:id="@+id/button_main_1"
android:layout_
android:layout_
android:text="button1" />
<Button
android:id="@+id/button_main_2"
android:layout_
android:layout_
android:text="button2" />
<Button
android:id="@+id/button_main_3"
android:layout_
android:layout_
android:text="button3" />
</LinearLayout>
顺便说一句。当您有 2 个线性布局,每个布局有 3 个按钮时,您应该在这两个布局中设置此 splitMotionEvents 以及该 2 个线性布局的父级。否则,您将只能单击每个布局的一个按钮(然后总和 = 2)。我希望你能明白。 :)
没有其他解决方案对我不起作用或太蹩脚。
【讨论】:
所以最好在所有布局中包含 android:splitMotionEvents="false" 对!! 我会写得更好,但我的英语仍然不足以描述这种复杂的情况:) 我仍然遇到同样的问题..这里有任何建议***.com/q/29072698/2624806【参考方案2】:是的,我也曾经遇到过这个问题 我找到了 android:splitMotionEvents="false" 的解决方案 这仅适用于引导布局的子级。
示例:
如果您创建两个布局 A 和 B 并且 在 A 中有两个按钮 b1,b2 在 B 中有两个按钮 b3,b4
A 和 B 都在父布局中 所以首先你必须清楚这些按钮不是父布局的直接子级
在 Parent Layout 中只有两个孩子 A 和 B
如果你添加 android:splitMotionEvents="false" 到父布局 那么多点触控将不适用于布局 A 和布局 B,但它将适用于每个按钮 b1、b2、b3、b4,因为它们不是父布局的直接子级
所以,如果您希望多点触控也无法在这些按钮上使用 比你必须将 android:splitMotionEvents="false" 这个单独添加到每个布局中
有一些情况:
1).如果只在布局 A 上添加 android:splitMotionEvents="false" 比你不能同时触摸按钮 b1 和按钮 b2 但您可以同时触摸按钮 b1 或 b2 和按钮 b3 或 b4。
2)。与案例 1 正好相反。
3)。但是,如果您在两个布局上都添加 android:splitMotionEvents="false" ,那么您将无法同时触摸屏幕上的任何两个按钮。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical"
android:splitMotionEvents="false" >
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
android:splitMotionEvents="false" >
<Button
android:layout_
android:layout_
android:text="b1" />
<Button
android:layout_
android:layout_
android:text="b2" />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal"
android:splitMotionEvents="false" >
<Button
android:layout_
android:layout_
android:text="b3" />
<Button
android:layout_
android:layout_
android:text="b4" />
</LinearLayout>
我认为它可能对你有帮助。
【讨论】:
【参考方案3】:您可以在整个屏幕上放置用户GestureOverlayView
,并且只允许较低的视图处理第一个触摸事件。
你必须在这个透明视图上设置一个 onTouchListener,它会做这样的事情:
gestureOverlayView.setOnTouchListener(new View.OnTouchListnener()
@Override
public boolean onTouch(View v, MotionEvent e)
// True means the event is ignored by the overlayed views
return e.getPointerCount() > 1 ? true : false;
【讨论】:
能否提供一些解决方案的示例代码? 谢谢。但是这个gestureOverLayView如何链接到我的片段视图呢?在哪里定义它?正如我所说,我有一个承载多个片段的活动。我可以在活动中而不是在每个片段中定义它吗? @Emil,你确定吗?以上是关于在我的应用程序中禁用多指触摸[重复]的主要内容,如果未能解决你的问题,请参考以下文章