عندما يوجّه المستخدم التركيز إلى عرض نص قابل للتعديل، مثل عنصر
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); } }
مصادر إضافية
- مساعد اختصارات لوحة المفاتيح: شاشة نظام تتيح للمستخدمين البحث في اختصارات لوحة المفاتيح التي يوفّرها تطبيقك.