عندما يركز المستخدم على عرض نص قابل للتعديل، مثل
EditText
وكان المستخدم لديه لوحة مفاتيح متصلة،
يتعامل النظام مع المدخلات. ومع ذلك، إذا أردت اعتراض
أو معالجة إدخال لوحة المفاتيح بنفسك، يمكنك إجراء ذلك من خلال تنفيذ طرق معاودة الاتصال
من KeyEvent.Callback
مثل onKeyDown()
وonKeyMultiple()
.
كل من Activity
وView
فئة تنفذ
KeyEvent.Callback
، وبالتالي
طرق معاودة الاتصال بشكل عام في إضافة هذه الفئات،
مناسبًا.
ملاحظة: عند التعامل مع أحداث لوحة المفاتيح باستخدام
الفئة KeyEvent
وواجهات برمجة التطبيقات ذات الصلة
أن لا تتوقّع أن تكون أحداث لوحة المفاتيح إلّا من لوحة مفاتيح خارجية. عدم الاعتماد مطلقًا على استلام المفتاح
الأحداث لأي مفتاح على أسلوب الإدخال البسيط (لوحة مفاتيح على الشاشة).
التعامل مع الأحداث الرئيسية الفردية
للتعامل مع ضغطة مفتاح فردية، يجب تنفيذ
onKeyDown()
أو onKeyUp()
،
حسبما تقتضي الحاجة. عادةً، تستخدم
onKeyUp()
إذا أردت التأكّد من تلقّي حدث واحد فقط إذا ضغط المستخدم مع الاستمرار على مفتاح،
ثم يتم استدعاء onKeyDown()
عدة مرات.
على سبيل المثال، تستجيب طريقة التنفيذ هذه لبعض مفاتيح لوحة المفاتيح للتحكم في اللعبة:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { KeyEvent.KEYCODE_D -> { moveShip(MOVE_LEFT) true } KeyEvent.KEYCODE_F -> { moveShip(MOVE_RIGHT) true } KeyEvent.KEYCODE_J -> { fireMachineGun() true } KeyEvent.KEYCODE_K -> { fireMissile() true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_D: moveShip(MOVE_LEFT); return true; case KeyEvent.KEYCODE_F: moveShip(MOVE_RIGHT); return true; case KeyEvent.KEYCODE_J: fireMachineGun(); return true; case KeyEvent.KEYCODE_K: fireMissile(); return true; default: return super.onKeyUp(keyCode, event); } }
التعامل مع مفاتيح التعديل
للاستجابة إلى الأحداث الرئيسية لأداة التعديل، مثلاً عند دمج مفتاح باستخدام Shift
أو Control، يمكنك
الاستعلام عن KeyEvent
التي يتم تمريرها إلى طريقة معاودة الاتصال. عدة طرق
تقدم معلومات حول مفاتيح التعديل، مثل
getModifiers()
وgetMetaState()
.
ومع ذلك، فإن أبسط الحل هو التحقق مما إذا
إلا أنه يتم الضغط على مفتاح التعديل الدقيق الذي تريده بطرق مثل
isShiftPressed()
وisCtrlPressed()
.
على سبيل المثال، في ما يلي آلية تنفيذ onKeyUp()
مرة أخرى، مع إمكانية معالجة إضافية عند الضغط مع الاستمرار على مفتاح Shift باستخدام أحد المفاتيح:
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when (keyCode) { ... KeyEvent.KEYCODE_J -> { if (event.isShiftPressed) { fireLaser() } else { fireMachineGun() } true } KeyEvent.KEYCODE_K -> { if (event.isShiftPressed) { fireSeekingMissle() } else { fireMissile() } true } else -> super.onKeyUp(keyCode, event) } }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { ... case KeyEvent.KEYCODE_J: if (event.isShiftPressed()) { fireLaser(); } else { fireMachineGun(); } return true; case KeyEvent.KEYCODE_K: if (event.isShiftPressed()) { fireSeekingMissle(); } else { fireMissile(); } return true; default: return super.onKeyUp(keyCode, event); } }
مصادر إضافية
- مساعد اختصارات لوحة المفاتيح : شاشة نظام تتيح للمستخدمين البحث عن اختصارات لوحة المفاتيح التي يوفّرها تطبيقك.