Kullanıcı odağı bir EditText
öğesi gibi düzenlenebilir metin görünümüne verdiğinde ve kullanıcıya donanım klavyesi takılı olduğunda, tüm giriş sistem tarafından işlenir. Ancak klavye girişini doğrudan kendiniz ele almak veya müdahale etmek istiyorsanız KeyEvent.Callback
arabiriminde onKeyDown()
ve onKeyMultiple()
gibi geri çağırma yöntemlerini uygulayarak bunu yapabilirsiniz.
Hem Activity
hem de View
sınıfları KeyEvent.Callback
arayüzünü uygular. Bu nedenle, genellikle bu sınıfların uzantısındaki geri çağırma yöntemlerini uygun şekilde geçersiz kılarsınız.
Not: KeyEvent
sınıfı ve ilgili API'lerle klavye etkinliklerini işlerken klavye etkinliklerinin yalnızca donanım klavyesinden gelmesini bekleyin. Hiçbir zaman yumuşak giriş yönteminde (dokunmatik klavye) herhangi bir tuş için tuş etkinliği alacağınızı varsaymayın.
Tek tuşla ilgili etkinlikleri işleme
Tek bir tuş basma işlemini işlemek için uygun şekilde onKeyDown()
veya onKeyUp()
'ı uygulayın. Genellikle, yalnızca bir etkinlik aldığınızdan emin olmak istiyorsanız onKeyUp()
kullanırsınız. Kullanıcı bir tuşa basıp tutarsa onKeyDown()
birden çok kez çağrılır.
Örneğin, bu uygulama bir oyunu kontrol etmek için bazı klavye tuşlarına yanıt verir:
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); } }
Değiştirici tuşları işleme
Bir tuşun Üst Karakter veya Denetleyici ile birlikte kullanılması gibi değiştirici tuş etkinliklerine yanıt vermek için geri çağırma yöntemine iletilen KeyEvent
değerini sorgulayabilirsiniz. getModifiers()
ve getMetaState()
gibi değiştirici tuşlar hakkında bilgi sağlayan çeşitli yöntemler vardır.
Ancak en basit çözüm, isShiftPressed()
ve isCtrlPressed()
gibi yöntemlerle ilgilendiğiniz tam değiştirici anahtara basılıp basılmadığını kontrol etmektir.
Örneğin, Üst Karakter tuşu tuşlardan biriyle basılı tutulduğunda uygulanan ekstra işlemeyle onKeyUp()
uygulamasını yine aşağıda görebilirsiniz:
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); } }
Ek kaynaklar
- Klavye Kısayolları Yardımcısı : Kullanıcıların uygulamanızın sunduğu klavye kısayollarını aramasına olanak tanıyan sistem ekranı.