Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Wenn Nutzer mit einem Eingabestift zeichnen, schreiben oder mit einer App interagieren, berühren sie manchmal den Bildschirm mit der Handfläche. Das Touch-Ereignis wird möglicherweise an Ihre App gesendet, bevor das System das Ereignis als versehentliche Berührung mit der Handfläche erkennt und ablehnt.
Berührungen mit der Handfläche erkennen und ignorieren
Ihre App muss unerwünschte Touch-Ereignisse erkennen und ignorieren. Android bricht eine Berührung mit der Handfläche ab, indem ein MotionEvent-Objekt an Ihre App gesendet wird.
Prüfen Sie die an Ihre App gesendeten MotionEvent-Objekte. Verwenden Sie die MotionEvent APIs, um Ereigniseigenschaften (Aktionen und Flags) zu ermitteln:
Ereignisse mit einem einzelnen Zeiger: Prüfen Sie, ob ACTION_CANCEL angezeigt wird. Bei Android 13 und höher muss auch FLAG_CANCELED angezeigt werden.
Mehrere Touch-Ereignisse: Prüfen Sie unter Android 13 und höher, ob ACTION_POINTER_UP und FLAG_CANCELED vorhanden sind.
Bewegungsereignisse mit den Properties ACTION_CANCEL und ACTION_POINTER_UP/FLAG_CANCELED ignorieren
valmyView=findViewById<View>(R.id.myView).apply{setOnTouchListener{view,event->// Process motion event.}}
Java
ViewmyView=findViewById(R.id.myView);myView.setOnTouchListener((view,event)->{// Process motion event.});
2. Ereignisaktion und Flags ermitteln
Prüfen Sie, ob ACTION_CANCEL vorhanden ist. Dies weist auf ein Ereignis mit einem einzelnen Zeiger auf allen API-Ebenen hin. Bei Android 13 und höher: Prüfen Sie, ob ACTION_POINTER_UP für FLAG_CANCELED. aktiviert ist.
Kotlin
valmyView=findViewById<View>(R.id.myView).apply{setOnTouchListener{view,event->when(event.actionMasked){MotionEvent.ACTION_CANCEL->{//Process canceled single-pointer motion event for all SDK versions.}MotionEvent.ACTION_POINTER_UP->{if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU&&(event.flagsandMotionEvent.FLAG_CANCELED)==MotionEvent.FLAG_CANCELED){//Process canceled multi-pointer motion event for Android 13 and higher.}}}true}}
Java
ViewmyView=findViewById(R.id.myView);myView.setOnTouchListener((view,event)->{switch(event.getActionMasked()){caseMotionEvent.ACTION_CANCEL:// Process canceled single-pointer motion event for all SDK versions.caseMotionEvent.ACTION_UP:if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.TIRAMISU&&(event.getFlags()&MotionEvent.FLAG_CANCELED)==MotionEvent.FLAG_CANCELED){//Process canceled multi-pointer motion event for Android 13 and higher.}}returntrue;});
3. Geste rückgängig machen
Nachdem Sie eine Berührung mit der Handfläche erkannt haben, können Sie die Bildschirmeffekte der Geste rückgängig machen.
MotionEvent: Stellt Touch- und Bewegungsereignisse dar. Enthält die Informationen, die erforderlich sind, um zu bestimmen, ob ein Ereignis ignoriert werden soll.
ACTION_CANCEL: MotionEvent-Konstante, die angibt, dass eine Geste rückgängig gemacht werden soll.
ACTION_POINTER_UP: MotionEvent-Konstante, die angibt, dass ein anderer Cursor als der erste Cursor nach oben gegangen ist (d. h. den Kontakt zum Display des Geräts verloren hat).
FLAG_CANCELED: MotionEvent-Konstante, die angibt, dass ein unbeabsichtigtes Touch-Ereignis durch das Bewegen des Cursors nach oben verursacht wurde. Wurde ACTION_POINTER_UP- und ACTION_CANCEL-Ereignissen unter Android 13 (API-Level 33) und höher hinzugefügt.
Ergebnisse
Ihre App kann jetzt Touch-Gesten mit der Handfläche für Mehrfingerereignisse auf Android 13 und höheren API-Levels sowie für Einzelfingerereignisse auf allen API-Levels erkennen und ablehnen.
Sammlungen, die diesen Leitfaden enthalten
Dieser Leitfaden ist Teil der folgenden ausgewählten Sammlungen von Kurzanleitungen, die allgemeinere Ziele der Android-Entwicklung abdecken:
Für große Bildschirme optimieren
Sorgen Sie dafür, dass Ihre App auf Tablets, faltbaren Geräten und ChromeOS-Geräten optimiert genutzt werden kann.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-02-06 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-02-06 (UTC)."],[],[],null,["# Reject stylus palm touches\n\n\u003cbr /\u003e\n\nWhen users draw, write, or interact with an app using a stylus, they sometimes\ntouch the screen with the palm of their hands. The touch event might be reported\nto your app before the system recognizes and dismisses the event as an\naccidental palm touch.\n\nIdentify and ignore palm touches\n--------------------------------\n\nYour app must identify extraneous touch events and ignore them. Android cancels\na palm touch by dispatching a [`MotionEvent`](/reference/kotlin/android/view/MotionEvent) object to your app.\n\n- Examine `MotionEvent` objects dispatched to your app. Use the `MotionEvent`\n APIs to determine event properties (actions and flags):\n\n - **Single-pointer events** --- Check for [`ACTION_CANCEL`](/reference/kotlin/android/view/MotionEvent#action_cancel). On Android 13 and higher, also check for [`FLAG_CANCELED`](/reference/kotlin/android/view/MotionEvent#flag_canceled).\n - **Multi-pointer events** --- On Android 13 and higher, check for [`ACTION_POINTER_UP`](/reference/kotlin/android/view/MotionEvent#action_pointer_up) and `FLAG_CANCELED`.\n- Ignore motion events that have the `ACTION_CANCEL` and\n `ACTION_POINTER_UP`/`FLAG_CANCELED` properties.\n\n| **Warning:** Android 12 (API level 32) and lower provide only `ACTION_POINTER_UP` for non-primary multi-pointer events. `FLAG_CANCELED` is not set for cancelable events such as palm touches. As a result, apps cannot determine whether the touch was intended or not on Android 12 and lower.\n\n### 1. Acquire motion event objects\n\nAdd an [`OnTouchListener`](/reference/kotlin/android/view/View.OnTouchListener) to your app: \n\n### Kotlin\n\n```kotlin\nval myView = findViewById\u003cView\u003e(R.id.myView).apply {\n setOnTouchListener { view, event -\u003e\n // Process motion event.\n }\n}\n```\n\n### Java\n\n```java\nView myView = findViewById(R.id.myView);\nmyView.setOnTouchListener( (view, event) -\u003e {\n // Process motion event.\n});\n```\n\n### 2. Determine the event action and flags\n\nCheck for `ACTION_CANCEL`, which indicates a single-pointer event on all API\nlevels. On Android 13 and higher, check `ACTION_POINTER_UP` for `FLAG_CANCELED.` \n\n### Kotlin\n\n```kotlin\nval myView = findViewById\u003cView\u003e(R.id.myView).apply {\n setOnTouchListener { view, event -\u003e\n when (event.actionMasked) {\n MotionEvent.ACTION_CANCEL -\u003e {\n //Process canceled single-pointer motion event for all SDK versions.\n }\n MotionEvent.ACTION_POINTER_UP -\u003e {\n if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.TIRAMISU &&\n (event.flags and MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) {\n //Process canceled multi-pointer motion event for Android 13 and higher.\n }\n }\n }\n true\n }\n}\n```\n\n### Java\n\n```java\nView myView = findViewById(R.id.myView);\nmyView.setOnTouchListener( (view, event) -\u003e {\n switch (event.getActionMasked()) {\n case MotionEvent.ACTION_CANCEL:\n // Process canceled single-pointer motion event for all SDK versions.\n case MotionEvent.ACTION_UP:\n if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.TIRAMISU &&\n (event.getFlags() & MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) {\n //Process canceled multi-pointer motion event for Android 13 and higher.\n }\n }\n return true;\n});\n```\n\n### 3. Undo the gesture\n\nAfter you've identified a palm touch, you can undo the onscreen effects of the\ngesture.\n\nYour app must keep a history of user actions so that unintended inputs such as\npalm touches can be undone. For an example of how to maintain history, see\n[Implement a basic drawing app](/codelabs/large-screens/advanced-stylus-support#2) in the [Enhance stylus support in an Android\napp](/codelabs/large-screens/advanced-stylus-support) codelab.\n\nKey points\n----------\n\n- [`MotionEvent`](/reference/kotlin/android/view/MotionEvent): Represents touch and movement events. Contains the information necessary to determine whether an event should be disregarded.\n- [`OnTouchListener#onTouch()`](/reference/kotlin/android/view/View.OnTouchListener#ontouch): Receives `MotionEvent` objects.\n- [`MotionEvent#getActionMasked()`](/reference/kotlin/android/view/MotionEvent#getactionmasked): Returns the action associated with a motion event.\n- [`ACTION_CANCEL`](/reference/kotlin/android/view/MotionEvent#action_cancel): `MotionEvent` constant that indicates a gesture should be undone.\n- [`ACTION_POINTER_UP`](/reference/kotlin/android/view/MotionEvent#action_pointer_up): `MotionEvent` constant that indicates a pointer other than the first pointer has gone up (that is, has relinquished contact with the device screen).\n- [`FLAG_CANCELED`](/reference/kotlin/android/view/MotionEvent#flag_canceled): `MotionEvent` constant that indicates that the pointer going up caused an unintentional touch event. Added to `ACTION_POINTER_UP` and `ACTION_CANCEL` events on Android 13 (API level 33) and higher.\n\nResults\n-------\n\nYour app can now identify and reject palm touches for multi-pointer events on\nAndroid 13 and higher API levels and for single-pointer events on all API\nlevels.\n\nCollections that contain this guide\n-----------------------------------\n\nThis guide is part of these curated Quick Guide collections that cover\nbroader Android development goals: \n\n### Optimize for large screens\n\nEnable your app to support an optimized user experience on tablets, foldables, and ChromeOS devices. \n[Quick guide collection](/quick-guides/collections/optimize-for-large-screens) \n\nHave questions or feedback\n--------------------------\n\nGo to our frequently asked questions page and learn about quick guides or reach out and let us know your thoughts. \n[Go to FAQ](/quick-guides/faq) [Leave feedback](https://issuetracker.google.com/issues/new?component=1573691&template=1993320)"]]