focusGroup değiştiricisini kullanarak birden fazla odak hedefini gruplandırabilirsiniz.
Gruplandırma, odak hiyerarşilerini yönetmenize, mantıksal kullanıcı arayüzü bölgelerini (ör. araç çubukları, iletişim kutusu işlemleri veya kart listeleri) izole etmenize ve odak bir bölgeye girdiğinde veya bölgeden çıktığında müdahale etmenize olanak tanır.
Odak grubu kavramları: giriş, çıkış ve varsayılan geçiş
Odak grubu, alt odak hedefleri etrafında uyumlu bir gezinme sınırı oluşturur. Odağın bu sınır boyunca nasıl hareket ettiğini anlamak için iki temel kavramı bilmeniz gerekir:
- Enter: Odak, odak grubunun dışındaki herhangi bir öğeden grup içindeki bir öğeye geçtiğinde gerçekleşen etkinlik.
- Çıkış: Odak, grubun son dahili öğesinden ayrılıp harici bir odak hedefine geçtiğinde gerçekleşen etkinlik.
Varsayılan odak geçişi davranışı
Varsayılan olarak, bir odak grubu dışarıdan odaklandığında:
- Gruba girme: Compose, otomatik olarak dahili bir alt odak hedefi seçer. Tek boyutlu (Sekme) gezinme için görsel görünüm sırasındaki ilk alt öğeyi seçer. İki boyutlu (ok tuşu veya d-pad) gezinme için gelen yöne geometrik olarak en yakın alt öğeyi seçer.
- Grup içinde gezinme: Gezinme tuşlarına tekrar tekrar basıldığında odak, grup tarafından kapsanan kardeş odak hedefleri arasında taşınır.
- Gruptan çıkma: Kullanıcı, gruptaki son odak hedefinden sonra gezindiğinde bir sonraki tuşa basıldığında gruptan çıkılır ve odak, grubun dışındaki komşu odak hedefine taşınır.
Odak girişi yönlendirmesini özelleştirme
Birçok kullanıcı arayüzü tasarımında, varsayılan giriş hedefi (ör. görünüm sırasındaki ilk alt öğe) kullanıcı için en mantıklı veya en uygun seçenek değildir.
Amaç ve kullanım alanları
Sol tarafında "İptal" düğmesi, sağ tarafında ise birincil "Onayla" düğmesi bulunan bir onay iletişim kutusu düşünün. Kullanıcı bir form alanından düğme çubuğuna gittiğinde:
- Varsayılan davranış: Görsel görünüm sırasındaki ilk düğme olduğu için odak "İptal" düğmesine gelir.
- Amaçlanan davranış: "Onayla" birincil önerilen işlem olduğundan, odak sırasının önceki bir noktasından düğme grubuna girerken odağın doğrudan "Onayla"ya gelmesini isteyebilirsiniz. Bununla birlikte, kullanıcının gerekirse "İptal"i seçmek için Sol tuşuna basmasına da izin verebilirsiniz.
Diğer yaygın kullanım alanları şunlardır:
TabRowgirerken odağı doğrudan seçili sekmeye taşıma.- Medya oynatma çubuğuna girildiğinde odağı doğrudan "Oynat / Duraklat" kontrolüne taşıma.
onEnter ve FocusRequester ile uygulama
Bir odak grubuna girerken odağı yönlendirmek için:
- İlgili odak hedeflerini içeren üst kapsayıcıya
focusGroupdeğiştiricisini uygulayın. focusPropertiesdeğiştiricisini kapsayıcıya uygulayın veonEntergeri çağırma işlevini yapılandırın.onEntergeri çağırmasında (FocusEnterExitScopekapsamlı),focusRequesterkullanarak tercih edilen varsayılan alt öğeyle ilişkili birFocusRequesterüzerinderequestFocus()yöntemini çağırın.
val defaultChildRequester = remember { FocusRequester() } Row( modifier = Modifier .focusGroup() .focusProperties { // Intercept entry into this group and redirect focus to the primary action onEnter = { defaultChildRequester.requestFocus() } } ) { Button(onClick = { /* Cancel action */ }) { Text("Cancel") } Button( onClick = { /* Confirm action */ }, modifier = Modifier.focusRequester(defaultChildRequester) ) { Text("Confirm (Default)") } }
onEnter ve onExit içinde, sınır boyunca odak geçişlerini tamamen engellemek için cancelFocusChange() yöntemini de çağırabilir veya kullanıcının Sekme, Aşağı ya da Sol tuşunu kullanarak gezinip gezinmediğine göre yönlendirmeyi özelleştirmek için requestedFocusDirection yöntemini inceleyebilirsiniz.
Kaydırılabilir kapsayıcılar varsayılan olarak odak gruplarıdır
Jetpack Compose'da LazyRow, LazyColumn ve LazyVerticalGrid gibi kaydırılabilir kapsayıcılar otomatik olarak odak grubu görevi görür.
onEnter veya onExit geri çağırmalarını ayarlamak için focusGroup değiştiricisini açıkça uygulamanız gerekmez.
Sizin için önerilenler
- Not: JavaScript devre dışı bırakıldığında bağlantı metni gösterilir.
- Odak hedefleri
- Odak geçiş sırası
- Metin alanlarına odaklanma
- Odağı geri yükleme
- Programatik olarak odaklanma isteğinde bulunma
- Odaklanarak gezinmeyi test etme