Oluşturma ağacında odak her değiştiğinde Compose, üst ve alt değiştiricilerin gözlemleyebileceği bir odak etkinliği tetikler. Odaklanma durumu geçişlerini dinlemek, mevcut odaklanma özelliklerini sorgulamak ve duruma dayalı kullanıcı arayüzü güncellemelerini tetiklemek için onFocusChanged değiştiricisini kullanabilirsiniz.
onFocusChanged ile odaklanma durumunu gözlemleme
onFocusChanged değiştiricisi, bir öğe odak kazandığında veya kaybettiğinde bir FocusState nesnesi sağlar.
Örneğin, özel bileşen durumunu güncellemek için odak değişikliklerini gözlemleyebilirsiniz (ör. bir öğenin kenarlık rengini değiştirme veya animasyon tetikleme):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
Bu örnekte remember, yeniden oluşturma işlemleri sırasında kenarlık rengini saklar ve öğenin odaklanma durumu her değiştiğinde kenarlık rengi güncellenir.
FocusState özellikleri
onFocusChanged yöntemine iletilen FocusState nesnesi üç temel özellik sağlar:
isFocused: Bu değiştiricinin bağlı olduğu belirli composable öğe şu anda etkin giriş odağına sahipsetruedeğerini döndürür.hasFocus: Bu composable veya alt composable'larından herhangi biri şu anda odaklanmışsatruedeğerini döndürür. Bu, içindeki herhangi bir alt öğenin ne zaman etkin olduğunu bilmesi gereken üst kapsayıcılar (kartlar veya araç çubukları gibi) için kullanışlıdır.isCaptured: Odak şu anda öğeye kilitliyse (ör.captureFocus()kullanan kalıcı alt etkileşimler sırasında)truedeğerini döndürür. Yakalanan odağı diğer öğelere taşımaya çalışmak odağı temizlemez.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Sizin için önerilenler
- Not: JavaScript devre dışı bırakıldığında bağlantı metni gösterilir.
- Odak hedefleri
- Odaklanma durumunu belirtme
- Programatik olarak odaklanma isteğinde bulunma
- Odağı yakalama ve serbest bırakma