Obrotowe dane wejściowe odnoszą się do elementów znajdujących się w zegarku, które kręcą się lub obracają. Wł. użytkownicy poświęcają średnio kilka sekund na interakcję z zegarkiem. Ty może zwiększyć wygodę użytkowników, umożliwiając im korzystanie z narzędzia Rotary Enter mogą szybko wykonywać różne zadania.
W większości zegarków jest to możliwe dzięki 3 głównym źródłom pokrętła (RSB) oraz fizyczną ramkę lub okrągłą ramkę dotykową w strefie dotyku wokół ekranu. Choć oczekiwane działanie może się różnić w zależności od typ danych wejściowych. Pamiętaj, aby obsługiwać pokrętło w przypadku wszystkich niezbędnych interakcji.
Przewiń
Większość użytkowników oczekuje, że aplikacje będą obsługiwać gest przewijania. Podczas przewijania treści strony w odpowiedzi na interakcje z obrotem ekranu. Opinia wizualna może zawierać wskaźniki pozycji przy przewijaniu w pionie lub wskaźniki strony.
ScalingLazyColumn
i Picker
domyślnie obsługują gest przewijania,
o ile trzeba umieścić te komponenty wewnątrz elementu Scaffold
. Scaffold
zapewnia podstawową strukturę układu
aplikacji na Wear OS i ma już miejsce na wskaźnik przewijania. Do
wyświetlić postęp przewijania, utwórz wskaźnik pozycji na podstawie
jak w tym fragmencie kodu:
val listState = rememberScalingLazyListState() Scaffold( positionIndicator = { PositionIndicator(scalingLazyListState = listState) } ) { // ... }
Działanie przyciągania dla ScalingLazyColumn
możesz skonfigurować za pomocą:
ScalingLazyColumnDefaults.snapFlingBehavior
, jak w poniższym przykładzie
fragment kodu:
val listState = rememberScalingLazyListState() Scaffold( positionIndicator = { PositionIndicator(scalingLazyListState = listState) } ) { val state = rememberScalingLazyListState() ScalingLazyColumn( modifier = Modifier.fillMaxWidth(), state = state, flingBehavior = ScalingLazyColumnDefaults.snapFlingBehavior(state = state) ) { // Content goes here // ... } }
Działania niestandardowe
Możesz też tworzyć działania niestandardowe, które reagują na pokrętło w Twojej aplikacji. Dla: Na przykład pokrętło powinno być używane do powiększania i pomniejszania treści lub sterowania głośnością multimediów .
Jeśli komponent natywnie nie obsługuje zdarzeń przewijania, takich jak wolumin możesz samodzielnie obsługiwać zdarzenia przewijania.
// VolumeScreen.kt
val focusRequester: FocusRequester = remember { FocusRequester() }
Column(
modifier = Modifier
.fillMaxSize()
.onRotaryScrollEvent {
// handle rotary scroll events
true
}
.focusRequester(focusRequester)
.focusable(),
) { ... }
Utwórz niestandardowy stan zarządzany w modelu widoku danych i używane niestandardowe wywołanie zwrotne do przetwarzania zdarzeń przewijania pokrętłem.
// 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)
}
}
Dla uproszczenia w poprzednim przykładzie użyto wartości pikseli, które, jeśli mogą być zbyt wrażliwe.
Wywołanie zwrotne po otrzymaniu zdarzeń, jak pokazano w tym fragmencie.
val focusRequester: FocusRequester = remember { FocusRequester() }
val volumeState by volumeViewModel.volumeState.collectAsState()
Column(
modifier = Modifier
.fillMaxSize()
.onRotaryScrollEvent {
volumeViewModel
.onVolumeChangeByScroll(it.verticalScrollPixels)
true
}
.focusRequester(focusRequester)
.focusable(),
) { ... }
Polecane dla Ciebie
- Uwaga: tekst linku wyświetla się, gdy JavaScript jest wyłączony
- Zmienianie zachowania punktu ostrości
- Dodaj obsługę klawiatury, myszy, trackpada i rysika w Jetpack Compose
- Ćwiczenie z programowania dotyczące Wear OS