Klavye işlemlerini kullan

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.Callbackarabiriminde 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