在我的应用程序中禁用多指触摸[重复]

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,你确定吗?

以上是关于在我的应用程序中禁用多指触摸[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用标准 UIButton 触摸事件

禁用隐藏导航栏的触摸

解决新装 Windows 11 系统触摸板多指操作无法使用的问题

如何在触摸屏幕时移动精灵并在我点击屏幕时禁用

通过 subView 禁用触摸视图

如何在不触摸或点击文本字段的情况下从动态创建的 UITextField 获取文本(禁用用户交互)?