Klavye işlemlerini kullan

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da klavye işlemlerini nasıl kullanacağınızı öğrenin.

Kullanıcı, EditText gibi düzenlenebilir bir metin görünümüne odaklandığında ve donanım klavyesi bağlı olduğunda tüm girişler sistem tarafından işlenir. Ancak klavye girişini kendiniz yakalamak veya doğrudan işlemek istiyorsanız KeyEvent.Callback arayüzündeki geri çağırma yöntemlerini (ör. onKeyDown() ve onKeyMultiple()) 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 klavyeden geldiğini varsayın. Yazılım giriş yöntemindeki (dokunmatik klavye) herhangi bir tuş için tuş etkinlikleri almayı asla beklemeyin.

Tek tuş etkinliklerini işleme

Tek bir tuşa 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 basılı 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ı kullanma

Bir tuşun Üst Karakter veya Kontrol ile birleştirilmesi gibi değiştirici tuş etkinliklerine yanıt vermek için geri çağırma yöntemine iletilen KeyEvent sorgusunu yapabilirsiniz. Değiştirici tuşlar hakkında bilgi veren çeşitli yöntemler vardır. Örneğin, getModifiers() ve getMetaState(). Ancak en basit çözüm, isShiftPressed() ve isCtrlPressed() gibi yöntemlerle ilgilendiğiniz değiştirici anahtarın basılı olup olmadığını kontrol etmektir.

Örneğin, onKeyUp() uygulaması, Üst Karakter tuşu tuşlardan biriyle basılı tutulduğunda ek işlemle birlikte tekrar verilmiştir:

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