Kullanıcı odağı TextField
gibi düzenlenebilir metin bileşenine verdiğinde
Cihaza bir donanım klavyesi takılıysa
tüm girişler sistem tarafından işlenir.
Önemli etkinlikleri işleyerek klavye kısayolları sağlayabilirsiniz.
Varsayılan klavye kısayolları
Aşağıdaki klavye kısayolları kullanıma hazırdır.
Klavye kısayolu | İşlem | Kısayolu destekleyen Composable'lar |
---|---|---|
Üst karakter+Ctrl+Sol ok/Sağ ok | Kelime başına/sonuna kadar metni seçme | BasicTextField , TextField |
Üst Karakter+Ctrl+Yukarı ok/Aşağı ok | Paragrafın başına/sonuna kadar metin seçme | BasicTextField , TextField |
Üst karakter+Alt+Yukarı ok/Aşağı ok veya Üst karakter+Meta+Sol ok/Sağ ok | Metnin başına/sonuna kadar olan metni seçme | BasicTextField , TextField |
ÜstKrktr+Sol ok/Sağ ok | Karakterleri seçme | BasicTextField , TextField |
Ctrl+A | Tümünü seç | BasicTextField , TextField |
Ctrl+C/Ctrl+X/Ctrl+V | Kopyalama/kesme/yapıştırma | BasicTextField , TextField |
Ctrl+Z/Ctrl+Üst Karakter+Z | Geri alma/yeniden yapma | BasicTextField , TextField |
PageDown/PageUp | Kaydır | LazyColumn , verticalScroll değiştirici, scrollable değiştirici |
Önemli etkinlikler
Oluşturma'da tek bir tuş vuruşunu
onKeyEvent
değiştiricisi.
Değiştirici, değiştirilmiş bileşen önemli bir etkinlik aldığında çağrılan bir lambda kabul eder.
Önemli etkinlik, KeyEvent
nesnesi olarak tanımlanır.
onKeyEvent
değiştiricisine iletilen lambdadaki nesneye başvurarak her bir önemli etkinlikle ilgili bilgileri alabilirsiniz.
Bir tuş vuruşu iki önemli etkinlik gönderir.
Bunlardan biri kullanıcı tuşa bastığında, diğeri ise tuşa basıldığında tetiklenir.
KeyEvent
nesnesinin type
özelliğine başvurarak iki önemli etkinliği ayırt edebilirsiniz.
onKeyEvent
lambda işlevinin döndürdüğü değer, önemli etkinliğin işlenmiş olup olmadığını belirtir.
Uygulamanız önemli etkinliği ele alıyorsa true
döndürün. Bu durumda etkinliğin yayılması durdurulur.
Aşağıdaki snippet'te doSomething()
işlevinin nasıl çağrılacağı gösterilmektedir
Kullanıcı Box
bileşeninde S tuşunu bıraktığında:
Box(
modifier = Modifier.focusable().onKeyEvent {
if(
it.type == KeyEventType.KeyUp &&
it.key == Key.S
) {
doSomething()
true
} else {
false
}
}
) {
Text("Press S key")
}
Değiştirici tuşlar
Bir KeyEvent
nesnesi, aşağıdakileri belirten şu özelliklere sahiptir:
değiştirici tuşlara basılıp basılmadığını kontrol edin:
Uygulamanızın işlediği önemli etkinlikleri açıklarken net olun.
Aşağıdaki snippet bir doSomething()
işlevini çağırır
yalnızca kullanıcı S tuşunu serbest bırakırsa.
Kullanıcı herhangi bir değiştirici tuşa basarsa
Üst Karakter tuşuna basıldığında, uygulama bu işlevi çağırmaz.
Box(
modifier = Modifier.focusable().onKeyEvent{
if(
it.type == KeyEventType.KeyUp &&
it.key == Key.S &&
!it.isAltPressed &&
!it.isCtrlPressed &&
!it.isMetaPressed &&
!it.isShiftPressed
) {
doSomething()
true
} else {
false
}
}
) {
Text("Press S key with a modifier key")
}
Boşluk tuşu ve Enter tuşu tıklama etkinlikleri
Boşluk tuşu ve Enter tuşu da tıklama etkinliklerini tetikler. Örneğin, kullanıcılar tıklama etkinliklerini aşağıdaki gibi işleyerek medya oynatmayı Boşluk veya Enter tuşuyla değiştirebilir (oynatma veya duraklatma):
MoviePlayer(
modifier = Modifier.clickable { togglePausePlay() }
)
clickable
değiştiricisi önemli etkinliklere müdahale eder
ve Boşluk tuşu veyaonClick()
Enter tuşuna basıldı.
Bu nedenle, snippet'te Boşluk veya Enter tuşuna basarak togglePausePlay()
işlevi çağrılır.
Kullanılmayan önemli etkinlikler
Tüketilmeyen önemli etkinlikler bileşenden yayılır
olayın meydana geldiği dış bileşendir.
Aşağıdaki örnekte, InnerComponent
, S anahtarı yayınlandığında önemli etkinlikleri tüketir. Bu nedenle OuterComponent
, S anahtarı yayınlanarak tetiklenen önemli etkinlikleri almaz.
Bu nedenle actionB()
işlevi hiçbir zaman çağrılmaz.
InnerComponent
ile ilgili diğer önemli etkinlikler (ör. D tuşunun kullanımı,
OuterComponent
tarafından işlenebilir.
actionC()
işlevi,
D anahtarı serbest bırakma işlemi OuterComponent
öğesine aktarılır.
OuterComponent(
modifier = Modifier.onKeyEvent {
when {
it.type == KeyEventType.KeyUp && it.key == Key.S -> {
actionB() // This function is never called.
true
}
it.type == KeyEventType.KeyUp && it.key == Key.D -> {
actionC()
true
}
else -> false
}
}
) {
InnerComponent(
modifier = Modifier.onKeyEvent {
if(it.type == KeyEventType.KeyUp && it.key == Key.S) {
actionA()
true
} else {
false
}
}
)
}
onKeyPreviewEvent
değiştirici
Bazı kullanım alanlarında önemli bir etkinliğe müdahale etmek
önce uygulamanız gerekir.
TextField
'ye özel kısayollar eklemek bunlardan biridir.
Aşağıdaki snippet, kullanıcıların sekme tuşuna basarak odaklanabilir bir sonraki bileşene geçmesine olanak tanır.
val focusManager = LocalFocusManager.current
var textFieldValue by remember { mutableStateOf(TextFieldValue()) }
TextField(
textFieldValue,
onValueChange = {
textFieldValue = it
},
modifier = Modifier.onPreviewKeyEvent {
if (it.type == KeyEventType.KeyUp && it.key == Key.Tab) {
focusManager.moveFocus(FocusDirection.Next)
true
} else {
false
}
}
)
Varsayılan olarak TextField
bileşeni, önemli etkinlik onKeyEvent
değiştiricisiyle ele alınsa bile kullanıcılar Tab tuşuna her basışında bir sekme karakteri ekler.
Sekme karakteri eklemeden klavye odağını taşımak için önemli etkinlikle ilişkili işlemleri tetiklemeden önce önemli etkinliği işleyin (snippet'te olduğu gibi).
onKeyPreviewEvent()
lambda işlevi, true
döndürerek önemli etkinliği durdurur.
Ebeveyn bileşen, alt bileşenlerinde gerçekleşen önemli etkinliği durdurabilir.
Aşağıdaki snippet'te, kullanıcılar S tuşuna bastığında actionForPreview()
işlevi yerine previewSKey()
işlevi çağrılır.
Column(
modifier = Modifier.onPreviewKeyEvent{
if(it.key == Key.S){
previewSKey()
true
}else{
false
}
}
) {
Box(
modifier = Modifier
.focusable()
.onPreviewKeyEvent {
actionForPreview(it)
false
}
.onKeyEvent {
actionForKeyEvent(it)
true
}
) {
Text("Press any key")
}
}
Box
bileşeni için onPreviewKeyEvent()
lambda'sı tetiklenmedi
Kullanıcılar Sekme tuşuna da bastığında.
onPreviewKeyEvent()
lambda, ilk olarak üst bileşende çağrılır.
alt bileşende onPreviewKeyEvent()
çağrılır.
Bu davranıştan yararlanarak ekran genelinde klavye kısayolları uygulayabilirsiniz.
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ır.