عندما يرسم المستخدمون أو يكتبون أو يتفاعلون مع تطبيق باستخدام قلم شاشة، قد يلمسون الشاشة أحيانًا براحة أيديهم. قد يتم إرسال حدث اللمس إلى تطبيقك قبل أن يتعرّف النظام على الحدث ويرفضه باعتباره لمسة غير مقصودة براحة اليد.
يجب أن يحدّد تطبيقك أحداث اللمس غير الضرورية ويتجاهلها. تشير المستويات 13 من واجهة برمجة التطبيقات والإصدارات الأحدث من Android إلى لمسات راحة اليد بشكل مختلف عن جميع مستويات واجهة برمجة التطبيقات الأخرى.
النتائج
يمكن لتطبيقك تحديد لمسات راحة اليد ورفضها للأحداث المتعدّدة المؤشرات على مستويات واجهة برمجة التطبيقات 13 والإصدارات الأحدث من Android وللأحداث ذات المؤشر الواحد على جميع مستويات واجهة برمجة التطبيقات.
التوافق مع الإصدارات
اضبط minSDK لمشروعك على مستوى واجهة برمجة التطبيقات 33 للأحداث المتعدّدة المؤشرات.
تتوفّر الأحداث ذات المؤشر الواحد على مستويات واجهة برمجة التطبيقات.
الطلبات التابعة
بلا عُري
تحديد لمسات راحة اليد وتجاهلها
يلغي Android لمسة راحة اليد من خلال إرسال عنصر MotionEvent إلى تطبيقك.
افحص عناصر
MotionEventالتي يتم إرسالها إلى تطبيقك. استخدِم واجهات برمجة التطبيقاتMotionEventلتحديد خصائص الحدث (الإجراءات والعلامات):- الأحداث ذات المؤشر الواحد : ابحث عن
ACTION_CANCEL. في الإصدار 13 من Android والإصدارات الأحدث، ابحث أيضًا عنFLAG_CANCELED. - الأحداث المتعدّدة المؤشرات : في الإصدار 13 من Android والإصدارات الأحدث، ابحث عن
ACTION_POINTER_UPوFLAG_CANCELED.
- الأحداث ذات المؤشر الواحد : ابحث عن
تجاهَل أحداث الحركة التي تتضمّن الخصائص
ACTION_CANCELوACTION_POINTER_UP/FLAG_CANCELED.
1. الحصول على كائنات مسجّل الحركات
أضِف OnTouchListener إلى تطبيقك:
Kotlin
val myView = findViewById<View>(R.id.myView).apply {
setOnTouchListener { view, event ->
// Process motion event.
}
}
Java
View myView = findViewById(R.id.myView);
myView.setOnTouchListener( (view, event) -> {
// Process motion event.
});
2. تحديد إجراء الحدث وعلاماته
ابحث عن ACTION_CANCEL، الذي يشير إلى حدث ذي مؤشر واحد على جميع مستويات واجهة برمجة التطبيقات. في الإصدار 13 من Android والإصدارات الأحدث، ابحث عن ACTION_POINTER_UP لـ FLAG_CANCELED.
Kotlin
val myView = 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.flags and MotionEvent.FLAG_CANCELED) == MotionEvent.FLAG_CANCELED) {
//Process canceled multi-pointer motion event for Android 13 and higher.
}
}
}
true
}
}
Java
View myView = findViewById(R.id.myView);
myView.setOnTouchListener( (view, event) -> {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_CANCEL:
// Process canceled single-pointer motion event for all SDK versions.
case MotionEvent.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.
}
}
return true;
});
3. التراجع عن الإيماءة
بعد تحديد لمسة راحة اليد، يمكنك التراجع عن التأثيرات التي تظهر على الشاشة للإيماءة.
يجب أن يحتفظ تطبيقك بسجلّ لإجراءات المستخدمين حتى يمكن التراجع عن الإدخالات غير المقصودة، مثل لمسات راحة اليد. للاطّلاع على مثال حول كيفية الاحتفاظ بالسجلّ، يُرجى الرجوع إلى الدرس التطبيقي حول الترميز تنفيذ تطبيق رسم أساسي في تحسين إمكانية استخدام قلم الشاشة في تطبيق Android app.
النقاط الرئيسية
MotionEvent: يمثّل أحداث اللمس والحركة. يحتوي على المعلومات اللازمة لتحديد ما إذا كان يجب تجاهل حدث معيّن.OnTouchListener#onTouch(): يتلقّى عناصرMotionEvent.MotionEvent#getActionMasked(): يعرض الإجراء المرتبط بمسجّل الحركات.ACTION_CANCEL: ثابتMotionEventيشير إلى أنّه يجب التراجع عن إيماءة.ACTION_POINTER_UP: ثابتMotionEventيشير إلى أنّ مؤشرًا غير المؤشر الأول قد تم رفعه (أي تم رفع الإصبع عن شاشة الجهاز).FLAG_CANCELED: ثابتMotionEventيشير إلى أنّ المؤشر الذي تم رفعه تسبّب في حدث لمس غير مقصود. تمت إضافته إلى أحداثACTION_POINTER_UPوACTION_CANCELعلى الإصدار 13 من Android (المستوى 33 من واجهة برمجة التطبيقات) والإصدارات الأحدث.
المجموعات التي تحتوي على هذا الدليل
هذا الدليل جزء من مجموعات "الدليل السريع" المنسّقة التي تتناول أهدافًا أوسع نطاقًا لتطوير تطبيقات Android: