Klavye işlemlerini kullan

Kullanıcı, EditText öğesi gibi düzenlenebilir bir metin görünümüne odaklandığında ve kullanıcının bağlı bir donanım klavyesi varsa tüm girişler sistem tarafından işlenir. Ancak klavye girişini doğrudan kendiniz ele almak veya müdahale etmek istiyorsanız KeyEvent.Callbackarabiriminde onKeyDown() ve onKeyMultiple() gibi geri çağırma yöntemleri 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öntemindeki (dokunmatik klavye) herhangi bir tuşa ait tuş etkinlikleri alacağınızı varsaymayın.

Tek tuşla ilgili etkinlikleri işleme

Tek bir tuş basımını 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 öğesini 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, onKeyUp() uygulamasının Üst Karakter tuşu tuşlardan biriyle basılı tutulduğunda ek işleme eklenmiş halini aşağıda bulabilirsiniz:

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