Oluşturma ile çevirmeli giriş

Döner giriş, saatinizin dönen veya dönen parçalarından gelen girişleri ifade eder. Kullanıcılar, kol saatiyle ortalama olarak yalnızca birkaç saniye etkileşimde bulunur. Kullanıcınızın çeşitli görevleri hızlı bir şekilde tamamlamasını sağlamak için Rotary girişi kullanarak kullanıcı deneyimini geliştirebilirsiniz.

Çoğu saatte, dönen yan düğme (RSB) ve fiziksel çerçeve veya ekranın etrafındaki dairesel dokunma bölgesi olan dokunmatik çerçeve olmak üzere üç ana döner giriş kaynağı kullanılır. Beklenen davranış giriş türüne göre değişiklik gösterse de tüm önemli etkileşimler için çevirmeli girişi desteklediğinden emin olun.

Kaydır

Çoğu kullanıcı, uygulamaların kaydırma hareketini desteklemesini bekler. İçerik ekranda kaydırılırken kullanıcıya döndürme etkileşimlerine yanıt olarak görsel geri bildirim verin. Görsel geri bildirim, dikey kaydırma için konum göstergeleri veya sayfa göstergeleri içerebilir.

Wear OS için Yazma özelliğini kullanarak çevirmeli kaydırma uygulayın. Bu örnekte, iskelesi ve dikey olarak kayan bir ScalingLazyColumn uygulaması gösterilmektedir. İskele, Wear OS uygulamaları için temel düzen yapısını sağlar ve kaydırma göstergesi için de bir yuvası vardır. Kaydırma ilerlemesini göstermek için liste durumu nesnesine dayalı bir konum göstergesi oluşturun. ScalingLazyColumn dahil olmak üzere kaydırılabilir görünümlerde, çevirmeli giriş eklemek için hâlihazırda kaydırılabilir bir durum mevcuttur. Dönen kaydırma etkinliklerini almak için aşağıdakileri yapın:

  1. FocusRequester kullanarak açıkça odaklanma isteğinde bulunun.
  2. Kullanıcı ayar düğmesini çevirdiğinde veya çerçeveyi döndürdüğünde sistemin oluşturduğu etkinliklere müdahale etmek için onRotaryScrollEvent değiştiricisini ekleyin. Her dönüşümlü etkinliğin belirli bir piksel değeri vardır ve dikey ya da yatay olarak kaydırılır. Değiştiricide, etkinliğin kullanılıp kullanılmadığını belirten bir geri çağırma da bulunur ve tüketildiğinde üst öğelere etkinlik yayılımı durdurulur.
val listState = rememberScalingLazyListState()

Scaffold(
    positionIndicator = {
        PositionIndicator(scalingLazyListState = listState)
    }
) {

    val focusRequester = rememberActiveFocusRequester()
    val coroutineScope = rememberCoroutineScope()

    ScalingLazyColumn(
        modifier = Modifier
            .onRotaryScrollEvent {
                coroutineScope.launch {
                    listState.scrollBy(it.verticalScrollPixels)

                    listState.animateScrollBy(0f)
                }
                true
            }
            .focusRequester(focusRequester)
            .focusable(),
        state = listState
    ) { ... }
}

Ayrık değerler

Ayrı değerleri ayarlamak için de çevirmeli etkileşimleri kullanın. Örneğin, ayarlarda parlaklığı ayarlayabilir veya bir alarm ayarlarken zaman seçicide sayıları seçebilirsiniz.

ScalingLazyColumn özelliğine benzer şekilde, seçici, kaydırma çubuğu, step ve diğer composable'ların da çevirmeli girdileri almak için odaklanmaları gerekir. Ekranda, zaman seçicide saat ve dakika gibi kaydırılabilir birden fazla hedef olması durumunda, her hedef için bir FocusRequester oluşturun ve kullanıcı saat veya dakikaya dokunduğunda odak değişikliğini buna göre yönetin.

@Composable
fun TimePicker() {
    var selectedColumn by remember { mutableStateOf(0) }
    val focusRequester1 = remember { FocusRequester() }
    val focusRequester2 = remember { FocusRequester() }

    Row {
       Picker(...)
       Picker(...)
    }

    LaunchedEffect(selectedColumn) {
        listOf(focusRequester1,
               focusRequester2)[selectedColumn]
            .requestFocus()
    }
}

Özel işlemler

Ayrıca, uygulamanızdaki çevirmeli girişlere yanıt veren özel işlemler de oluşturabilirsiniz. Örneğin, yakınlaştırmak ve uzaklaştırmak ya da bir medya uygulamasındaki ses düzeyini kontrol etmek için çevirmeli girişi kullanın.

Bileşeniniz, ses seviyesi kontrolü gibi kaydırma etkinliklerini yerel olarak desteklemiyorsa kaydırma etkinliklerini kendiniz işleyebilirsiniz.

// VolumeScreen.kt

val focusRequester: FocusRequester = remember { FocusRequester() }

Column(
    modifier = Modifier
        .fillMaxSize()
        .onRotaryScrollEvent {
            // handle rotary scroll events
            true
        }
        .focusRequester(focusRequester)
        .focusable(),
) { ... }

Görünüm modelinde yönetilen bir özel durum ve çevirmeli kaydırma etkinliklerini işlemek için kullanılan bir özel geri çağırma oluşturun.

// VolumeViewModel.kt

object VolumeRange(
    public val max: Int = 10
    public val min: Int = 0
)

val volumeState: MutableStateFlow<Int> = ...

fun onVolumeChangeByScroll(pixels: Float) {
    volumeState.value = when {
        pixels > 0 -> min (volumeState.value + 1, VolumeRange.max)
        pixels < 0 -> max (volumeState.value - 1, VolumeRange.min)
    }
}

Basitlik sağlamak amacıyla, önceki örnekte kullanılan piksel değerleri gerçekte kullanıldığında aşırı hassas olabilecek piksel değerleridir.

Aşağıdaki snippet'te gösterildiği gibi, etkinlikleri aldıktan sonra geri çağırmayı kullanın.

val focusRequester: FocusRequester = remember { FocusRequester() }
val volumeState by volumeViewModel.volumeState.collectAsState()

Column(
    modifier = Modifier
        .fillMaxSize()
        .onRotaryScrollEvent {
            volumeViewModel
                .onVolumeChangeByScroll(it.verticalScrollPixels)
            true
        }
        .focusRequester(focusRequester)
        .focusable(),
) { ... }

Ek kaynaklar

Wear OS ve diğer Wear OS API'leri için Compose'un sağladığı işlevleri destekleyen bir dizi Wear kitaplıkları sunan Google açık kaynak projesi Horologist'ı kullanabilirsiniz. Horology, ileri düzey kullanım alanları ve cihaza özgü birçok ayrıntı uygulama sağlar.

Örneğin, farklı çevirmeli giriş kaynaklarının hassasiyeti değişiklik gösterebilir. Değerler arasında daha yumuşak bir geçiş için hız sınırlaması yapabilir veya geçişe yönelik tutturma ya da animasyonlar ekleyebilirsiniz. Bu sayede hız, kullanıcılar için daha doğal bir hale gelir. Horology, kaydırılabilir bileşenler ve ayrık değerler için değiştiriciler sunar. Ayrıca, odaklanmayı sağlayacak yardımcı programlar ve dokunma teknolojisiyle ses seviyesi kontrolü uygulamak için Ses Kullanıcı Arayüzü kitaplığı da içerir.

Daha fazla bilgi için GitHub'da Horologist bölümüne bakın.