Meine App verwendet eine Aktivität, um mehrere Fragmente zu hosten. Jedes Mal, wenn ein Fragment auf dem Telefonbildschirm angezeigt wird, besteht die Ansicht jedes Fragments aus mehreren Bildsymbolen.
Derzeit kann der Benutzer zwei Symbole gleichzeitig mit zwei Fingern drücken (wobei jeder Finger auf ein Symbol drückt). Ich möchte diese Multi-Touch-Funktion deaktivieren in meiner App, um zuzulassen, es kann jeweils nur ein Symbol gedrückt werden .
Ich habe folgende Möglichkeiten ausprobiert:
Weg 1: in meinem App-Theme habe ich hinzugefügt:
<item name="Android:windowEnableSplitTouch">false</item>
Weg 2: In Android Manifest-XML habe ich hinzugefügt:
<uses-feature Android:name="Android.hardware.touchscreen.multitouch" Android:required="false" />
Weg 3: in meiner Aktivität:
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getPointerCount() > 1) {
System.out.println("Multitouch detected!");
return true;
}
else
return super.onTouchEvent(event);
}
Leider funktioniert keine meiner Lösungen. Also, Wie kann ich die Multi-Touch-Funktion deaktivieren in meiner App?
Für den Fall: Sie haben mehrere Schaltflächen und möchten nur eine Schaltfläche auswählen. In parent (NICHT ROOT, nur übergeordnetes Kind) von Schaltflächen, in ihren XML-Params hinzufügen
Android: splitMotionEvents = "false"
Und das ist es. Beispiel:
<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>
Übrigens Wenn Sie zwei lineare Layouts mit drei Schaltflächen pro Layout haben, sollten Sie diese splitMotionEvents in diesen beiden Layouts und auch in parent von diesen 2 linearen Layouts festlegen. Andernfalls können Sie nur eine Schaltfläche pro Layout anklicken (Summe = 2). Ich hoffe du verstehst es. :)
Keine der anderen Lösungen funktionierte für mich oder war zu lahm.
Ja, ich stand auch einmal vor diesem Problem Und fand eine Lösung, dass Android: splitMotionEvents = "false" Dies funktioniert nur, um Kinder eines Layouts zu leiten.
Beispiel :
Zum Beispiel, wenn Sie zwei Layouts A und B und Erstellen. In A haben Sie zwei Schaltflächen b1, b2 . In B haben Sie zwei Schaltflächen b3, b4
sowohl A als auch B befinden sich im übergeordneten Layout Daher müssen Sie zunächst festlegen, dass diese Schaltflächen keine direkten untergeordneten Elemente des übergeordneten Layouts sind
Im übergeordneten Layout haben nur zwei Kinder A und B
Wenn Sie dann Android hinzufügen: splitMotionEvents = "false" zu Parent Layout , Wird Multitouch auf Layout A und Layout B nicht funktionieren, aber es funktioniert auf jeder Taste b1, b2, b3, b4, weil Dies sind keine direkten Kinder des übergeordneten Layouts
Wenn Sie möchten, dass Multi-Touch auch auf diesen Schaltflächen nicht funktioniert Dann müssen Sie Android: splitMotionEvents = "false" dies zu jedem Layout separat hinzufügen
Es gibt einige Fälle:
1) .Wenn Sie nur Android hinzufügen: splitMotionEvents = "false" on Layout A , Als Sie die Tasten b1 und b2 nicht gleichzeitig berühren können . Sie können jedoch die Schaltfläche b1 berühren oder b2 und button b3 oder b4 gleichzeitig.
2). genau das Gegenteil von Fall 1.
3). Wenn Sie jedoch Android hinzufügen: splitMotionEvents = "false" auf beiden Layouts, können Sie nicht gleichzeitig zwei Schaltflächen auf Ihrem Bildschirm berühren.
<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>
Ich denke, es könnte für Sie hilfreich sein.
Sie können dem Benutzer eine GestureOverlayView
um den gesamten Bildschirm legen und nur das erste Berührungsereignis von den unteren Ansichten verarbeiten lassen.
Sie müssen einen onTouchListener für diese transparente Ansicht einrichten, die etwa Folgendes bewirkt:
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;
}
}