17

我的應用使用一個Activity來承載多個片段。每次在手機屏幕上顯示一個片段。每個片段的視圖由多個圖像圖標組成。在我的應用中禁用多指觸摸

目前,用戶可以同時按下兩個圖標兩個手指(每個圖形按下一個圖標)。 我想在我的應用程序上禁用此多點觸控功能,以允許只有一個圖標按鈕在時間生效。

我嘗試以下方法:

方法1:在我的應用程序的主題,我說:

<item name="android:windowEnableSplitTouch">false</item> 

方式2:在Android清單XML,我說:

<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" /> 

方式3:在我的動態:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    if(event.getPointerCount() > 1) { 
     System.out.println("Multitouch detected!"); 
     return true; 
    } 
    else 
     return super.onTouchEvent(event); 
    } 

不幸的是,我的解決方案沒有工作。那麼,如何在我的應用程序中禁用多點觸控功能

+1

嘗試在您的ParentView而不是應用主題上添加'android:splitMotionEvents =「false」'。不知道是否有差異,但在我的應用程序,它的作品。 – Aprian

+0

我試過了,它不適用於我 –

回答

1

您可以在整個屏幕上放置用戶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; 
    } 
} 
+0

您能否提供一些解決方案的示例代碼? –

+0

確定檢查出來。 –

+0

謝謝。但這個gestureOverLayView如何鏈接到我的片段視圖呢?在哪裏定義它?正如我所說我有一個活動主持多個片段。我可以在活動中而不是在每個片段中定義它嗎? –

34

對於案例:您有多個按鈕,你想使選擇只有一個按鈕。 在按鈕的父(不是根用戶,只是孩子的父母),在其XML PARAMS添加

機器人:splitMotionEvents = 「假」

就是這樣。 例如:

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:splitMotionEvents="false" <-----------!!! 
    > 

    <Button 
    android:id="@+id/button_main_1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="button1" /> 

    <Button 
    android:id="@+id/button_main_2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="button2" /> 

    <Button 
    android:id="@+id/button_main_3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="button3" /> 
</LinearLayout> 

Btw。當你有2個線性佈局,每個佈局有3個按鈕時,你應該在這兩個佈局中設置這個splitMotionEvents,並且在這2個linearLayouts的父級中。否則,每個佈局只能單擊一個按鈕(總和= 2)。我希望你明白。 :)

沒有其他解決方案不適合我或太跛腳。

+0

所以它更好地在所有版面中包含android:splitMotionEvents =「false」! –

+0

我會寫得更好,但我的英語還不足以描述這種複雜的情況:) – deadfish

+0

我仍然運行相同的問題..任何建議在這裏http://stackoverflow.com/q/29072698/2624806 – CoDe

9

是的,我也面臨這個問題,一旦 ,我發現解決方案,機器人:splitMotionEvents =「假」 這將工作只到佈局的直接孩子。

一樣,如果你創建兩個佈局A和B以及 在甲你有兩個按鈕B1,B2 在B中有兩個按鈕B3,B4

A和B兩者在家長佈局 所以首先你要清楚的是,這些按鈕是不是家長佈局的直接孩子

在父佈局只有兩個孩子A和B

如果您添加android:splitMotionEvents =「false」父母佈局 然後多點觸摸將無法工作在佈局A和佈局B,但它會在每個按鈕b1,b2,b3,b4上工作,因爲這些不是直接的家長佈局的孩子

所以,如果你想要的是多點觸摸將不會在這些按鈕的工作也 比你要添加機器人:splitMotionEvents =「假」這對每一個佈局分別

有一些案例:

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_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:splitMotionEvents="false" > 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:splitMotionEvents="false" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="b1" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="b2" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:splitMotionEvents="false" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="b3" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="b4" /> 
</LinearLayout> 

我認爲它可能對你有幫助。