17

La mia app utilizza un'attività per ospitare diversi frammenti. Ogni volta che viene visualizzato un frammento sullo schermo del telefono. La vista di ciascun frammento è composta da diverse icone di immagine.Disattiva il tocco con più dita nella mia app

Attualmente, l'utente è in grado di premere su due icone contemporaneamente con con due dita (con ciascuna pressione premere su un'icona). Desidero disattivare questa funzione multi-touch sulla mia app per consentire a una sola icona premere effetto alla volta.

Ho provato le seguenti modalità:

Way 1: nella mia app tema, ho aggiunto:

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

Way 2: Nel manifesto Android xml, ho aggiunto:

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

Via 3: nella mia attività:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

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

Sfortunatamente, nessuna delle mie soluzioni funziona. Quindi, Come posso disabilitare la funzione multi-touch nella mia app ??

+1

prova ad aggiungere 'android: splitMotionEvents =" false "' sul tuo ParentView invece che sul tema dell'app. Non sono sicuro se ci sono diff, ma sulle mie app funziona. – Aprian

+0

Ho provato, non funziona neanche per me –

risposta

1

È possibile inserire l'utente a GestureOverlayView in tutto lo schermo e consentire l'elaborazione dell'evento di primo tocco nelle viste inferiori.

È necessario impostare un onTouchListener su questo punto di vista trasparente, che fa qualcosa di simile:

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

Potresti fornire qualche codice di esempio della tua soluzione? –

+0

Certo, dai un'occhiata. –

+0

Grazie. ma come fa questo gestureOverLayView collegato alla mia vista frammento ?? Dove definirlo? Come ho detto, ho un'attività che ospita più frammenti. Posso definirlo in attività invece che in ogni frammento? –

34

Per il caso: si dispone di più pulsanti e si desidera rendere selezionato un solo pulsante. In genitore (NON ROOT, proprio genitore del figlio) di pulsanti, nelle sue params xml aggiungere

android: splitMotionEvents = "false"

E questo è tutto. Esempio:

<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. Quando hai 2 linearlayout con 3 pulsanti per layout, devi impostare splitMotionEvents in questi due layout e anche nel genitore di questi 2 linearLayouts. Altrimenti potrai fare clic su un solo pulsante per layout (somma = 2 quindi). Spero che tu lo ottenga. :)

Nessuna delle altre soluzioni non ha funzionato per me o era troppo zoppo.

+0

quindi è meglio includere Android: splitMotionEvents = "false" in tutti i layout giusto !! –

+0

Scriverò meglio ma il mio inglese non è ancora abbastanza per descrivere questa complessa situazione :) – deadfish

+0

Sto ancora correndo con lo stesso problema..un suggerimento qui http://stackoverflow.com/q/29072698/2624806 – CoDe

9

Sì ho anche affrontato la questione una volta e ho trovato la soluzione che Android: splitMotionEvents = "false" questo funzionerà solo ai figli diretti di un layout.

Esempio:

Come se si creano due layout di A e B e In A si dispone di due pulsanti b1, b2 In B si hanno due bottoni B3, B4

sia A e B sono in layout Parent Quindi, prima si devono chiaro che questi pulsanti non sono figli diretti di layout Parent

in layout madri hanno solo due bambini a e B

0.123.

Che se si aggiunge android: splitMotionEvents = "false" al Parent Layout quindi il multi-touch non funzionerà su Layout A e Layout B ma funzionerà su tutti i pulsanti b1, b2, b3, b4 perché questi non sono diretti figli di layout Parent

Quindi, se si vuole che il multi touch non funziona su questi tasti anche che si deve aggiungere Android: splitMotionEvents = "false" questo per ogni layout di separatamente

ci sono alcuni Casi:

1). Se si aggiunge solo android: splitMotionEvents = "false" sul layout A di quanto non sia possibile toccare il pulsante b1 e il pulsante b2 allo stesso tempo ma è possibile toccare il pulsante b1 o b2 e il pulsante b3 o b4 allo stesso tempo.

2). proprio di fronte al caso 1.

3). Ma se si aggiunge android: splitMotionEvents = "false" su entrambi i formati di quanto non sia possibile toccare due pulsanti sullo schermo contemporaneamente.

<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> 

Penso che potrebbe utile per voi.

Problemi correlati