Kullanıcı, TextField gibi düzenlenebilir bir metin bileşenine odaklandığında ve cihazda donanım klavyesi takılı olduğunda tüm girişler sistem tarafından işlenir.
Tuş etkinliklerini işleyerek klavye kısayolları sağlayabilirsiniz.
Varsayılan klavye kısayolları
Aşağıdaki klavye kısayolları varsayılan olarak kullanılabilir.
| Klavye kısayolu | İşlem | Kısayolu destekleyen composable'lar |
|---|---|---|
| üst karakter+Ctrl+sol ok/sağ ok | Kelimenin başına/sonuna kadar olan metni seçme | BasicTextField, TextField |
| Üst karakter+Ctrl+Yukarı ok/Aşağı ok | Paragrafın başına/sonuna kadar olan metni 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 |
| Üst karakter+sol ok/sağ ok | Karakter 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 al/yeniden yap | BasicTextField, TextField |
| PageDown/PageUp | Kaydırma | LazyColumn, verticalScroll değiştiricisi, scrollable değiştiricisi |
Önemli etkinlikler
Oluşturma bölümünde, onKeyEvent değiştiricisiyle tek bir tuş vuruşunu işleyebilirsiniz.
Değiştirici, değiştirilen bileşen bir tuş etkinliği aldığında çağrılan bir lambda kabul eder.
Önemli etkinlikler KeyEvent nesnesi olarak tanımlanır.
onKeyEvent değiştiricisine iletilen lambda'daki nesneye başvurarak her önemli etkinliğin bilgilerini alabilirsiniz.
Bir tuş vuruşu iki tuş etkinliği gönderir.
Biri kullanıcı tuşa bastığında, diğeri ise tuş bırakıldığında tetiklenir.
KeyEvent nesnesinin type özelliğine bakarak iki önemli etkinliği ayırt edebilirsiniz.
onKeyEvent lambda'sının döndürülen değeri, tuş etkinliğinin işlenip işlenmediğini gösterir.
Uygulamanız önemli etkinliği işliyorsa true değerini döndürün. Bu değer, etkinliğin yayılmasını durdurur.
Aşağıdaki snippet'te, kullanıcı Box bileşeninde S tuşunu bıraktığında doSomething() işlevinin nasıl çağrılacağı gösterilmektedir:
Box( modifier = Modifier .onKeyEvent { if ( it.type == KeyEventType.KeyUp && it.key == Key.S ) { doSomething() true } else { false } } .focusable() ) { Text("Press S key") }
Değiştirici tuşlar
KeyEvent nesnesinde, değiştirici tuşlara basılıp basılmadığını gösteren aşağıdaki özellikler bulunur:
Uygulamanızın işlediği önemli etkinlikleri açıklarken net olun.
Aşağıdaki snippet, yalnızca kullanıcı S tuşunu bıraktığında bir doSomething() işlevini çağırır.
Kullanıcı, Üst Karakter tuşu gibi herhangi bir değiştirici tuşa basarsa uygulama, 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 çubuğu ve Enter tuşu tıklama etkinlikleri
Boşluk çubuğu ve Enter tuşu da tıklama etkinliklerini tetikler. Örneğin, kullanıcılar tıklama etkinliklerini aşağıdaki gibi işleyerek boşluk çubuğu veya Enter tuşuyla medya oynatmayı açıp kapatabilir (oynatma veya duraklatma):
MediaPlayer(modifier = Modifier.clickable { togglePausePlay() })
clickable değiştiricisi, tuş etkinliklerini yakalar ve boşluk çubuğu veya Enter tuşuna basıldığında onClick() geri çağırma işlevini çağırır.
Bu nedenle, snippet'te boşluk çubuğu veya Enter tuşuna basılarak togglePausePlay() işlevi çağrılır.
Tüketilmeyen önemli etkinlikler
Tüketilmeyen önemli etkinlikler, etkinliğin gerçekleştiği bileşenden kapsayıcı dış bileşene yayılır.
Aşağıdaki örnekte InnerComponent, S tuşu bırakıldığında tuş etkinliklerini kullanır. Bu nedenle OuterComponent, S tuşunun bırakılmasıyla tetiklenen tuş etkinliklerini almaz.
Bu nedenle actionB() işlevi hiçbir zaman çağrılmaz.
InnerComponent üzerindeki diğer tuş etkinlikleri (ör. D tuşunu bırakma) OuterComponent tarafından işlenebilir.
D tuşunu bırakma önemli etkinliği OuterComponent'e yayıldığı için actionC() işlevi çağrı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, varsayılan işlemi tetiklemeden önce önemli bir etkinliği yakalamak isteyebilirsiniz.
TextField klasörüne özel kısayollar eklemek tipik bir örnektir.
Aşağıdaki snippet, kullanıcıların sekme tuşuna basarak odaklanılabilir 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, tuş etkinliği onKeyEvent değiştiricisiyle işlense bile kullanıcılar Sekme tuşuna her bastığında bir sekme karakteri ekler.
Klavye odağını sekme karakteri eklemeden taşımak için, snippet'te olduğu gibi, tuş etkinliğiyle ilişkili işlemleri tetiklemeden önce tuş etkinliğini işleyin.
onKeyPreviewEvent() lambda, true değerini döndürerek önemli etkinliği yakalar.
Üst bileşen, alt bileşenlerinde gerçekleşen tuş etkinliğini kesebilir.
Aşağıdaki snippet'te, kullanıcılar actionForPreview() işlevini çağırmak yerine S tuşuna bastığında 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") } }
Kullanıcılar Sekme tuşuna bastığında da Box bileşeni için onPreviewKeyEvent() lambda tetiklenmez.
Önce üst bileşendeki onPreviewKeyEvent() lambda, ardından alt bileşendeki 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ıyan sistem ekranı.