Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Kullanıcılar ekran kalemi kullanarak çizim yaparken, yazarken veya bir uygulamayla etkileşimde bulunurken bazen ellerinin avuçlarıyla ekrana dokunur. Sistem, dokunma etkinliğini algılayıp yanlışlıkla avuçla dokunma olarak reddetmeden önce dokunma etkinliği uygulamanıza bildirilebilir.
Avuç içi dokunuşlarını belirleme ve yok sayma
Uygulamanız, alakasız dokunma etkinliklerini tanımlamalı ve yok saymalıdır. Android, uygulamanıza bir MotionEvent nesnesi göndererek avuç içi dokunuşunu iptal eder.
Uygulamanıza gönderilen MotionEvent nesnelerini inceleyin. Etkinlik özelliklerini (işlemler ve işaretler) belirlemek için MotionEvent API'lerini kullanın:
Tek işaretçili etkinlikler: ACTION_CANCEL değerini kontrol edin. Android 13 ve sonraki sürümlerde FLAG_CANCELED simgesini de kontrol edin.
Çoklu işaretçi etkinlikleri: Android 13 ve sonraki sürümlerde ACTION_POINTER_UP ve FLAG_CANCELED değerlerini kontrol edin.
ACTION_CANCEL ve ACTION_POINTER_UP/FLAG_CANCELED özelliklerine sahip hareket etkinliklerini yoksayabilirsiniz.
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. Etkinlik işlemini ve işaretlerini belirleme
Tüm API düzeylerinde tek işaretçili bir etkinliği gösteren ACTION_CANCEL değerini kontrol edin. Android 13 ve sonraki sürümlerde FLAG_CANCELED. için ACTION_POINTER_UP'ü kontrol edin
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. Hareketi geri alma
Avuç dokunuşunu tespit ettikten sonra hareketin ekrandaki efektlerini geri alabilirsiniz.
MotionEvent: Dokunma ve hareket etkinliklerini temsil eder. Bir etkinliğin dikkate alınmayıp alınmaması gerektiğini belirlemek için gerekli bilgileri içerir.
ACTION_CANCEL: Bir hareketin geri alınması gerektiğini belirten MotionEvent sabit.
ACTION_POINTER_UP: İlk işaretçi dışında bir işaretçinin yukarı gittiğini (yani cihaz ekranıyla temasını kaybettiğini) belirten MotionEvent sabit.
FLAG_CANCELED: İşaretçinin yukarı doğru hareket etmesinin istenmeyen bir dokunma etkinliğine neden olduğunu belirten MotionEvent sabit. Android 13 (API düzeyi 33) ve sonraki sürümlerdeki ACTION_POINTER_UP
ve ACTION_CANCEL etkinliklerine eklendi.
Sonuçlar
Uygulamanız artık Android 13 ve sonraki API düzeylerindeki çoklu işaretçi etkinlikleri ve tüm API düzeylerindeki tek işaretçi etkinlikleri için avuç içi dokunuşlarını tanımlayıp reddedebilir.
Bu kılavuzu içeren koleksiyonlar
Bu kılavuz, daha geniş Android geliştirme hedeflerini kapsayan, özel olarak seçilmiş Hızlı Kılavuz koleksiyonlarından biridir:
Büyük ekranlar için optimize etme
Uygulamanızın tabletler, katlanabilir cihazlar ve ChromeOS cihazlarda optimize edilmiş bir kullanıcı deneyimi sunmasını sağlayın.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-02-06 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 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)"]]