@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.height
1010import androidx.compose.foundation.layout.padding
1111import androidx.compose.foundation.layout.width
1212import androidx.compose.runtime.Composable
13+ import androidx.compose.runtime.LaunchedEffect
1314import androidx.compose.runtime.getValue
1415import androidx.compose.runtime.mutableIntStateOf
1516import androidx.compose.runtime.mutableStateOf
@@ -19,6 +20,9 @@ import androidx.compose.ui.Modifier
1920import androidx.compose.ui.focus.FocusRequester
2021import androidx.compose.ui.focus.focusRequester
2122import androidx.compose.ui.focus.focusRestorer
23+ import androidx.compose.ui.input.key.Key
24+ import androidx.compose.ui.input.key.key
25+ import androidx.compose.ui.input.key.onPreviewKeyEvent
2226import androidx.compose.ui.platform.LocalContext
2327import androidx.compose.ui.unit.dp
2428import androidx.tv.material3.LocalContentColor
@@ -32,6 +36,8 @@ import dev.aaa1115910.biliapi.entity.ugc.UgcTypeV2
3236import dev.aaa1115910.bv.BVApp
3337import dev.aaa1115910.bv.util.getDisplayName
3438import dev.aaa1115910.bv.util.ifElse
39+ import dev.aaa1115910.bv.util.isKeyDown
40+ import kotlinx.coroutines.delay
3541
3642@Composable
3743fun TopNav (
@@ -49,6 +55,15 @@ fun TopNav(
4955 targetValue = if (isLargePadding) 24 .dp else 12 .dp,
5056 label = " top nav vertical padding"
5157 )
58+ var tabMoved by remember { mutableStateOf(true ) }
59+
60+ LaunchedEffect (selectedNav) {
61+ delay(200 )
62+ onSelectedChanged(selectedNav)
63+ // 别急着向下移动焦点,动画还没结束
64+ delay(400 )
65+ tabMoved = true
66+ }
5267
5368 Row (
5469 modifier = modifier
@@ -57,7 +72,12 @@ fun TopNav(
5772 horizontalArrangement = Arrangement .Center
5873 ) {
5974 TabRow (
60- modifier = Modifier .focusRestorer(focusRequester),
75+ modifier = Modifier
76+ .focusRestorer(focusRequester)
77+ .onPreviewKeyEvent {
78+ if (it.isKeyDown() && it.key == Key .DirectionDown ) return @onPreviewKeyEvent ! tabMoved
79+ false
80+ },
6181 selectedTabIndex = selectedTabIndex,
6282 separator = { Spacer (modifier = Modifier .width(12 .dp)) },
6383 ) {
@@ -68,9 +88,9 @@ fun TopNav(
6888 topNavItem = tab,
6989 selected = index == selectedTabIndex,
7090 onFocus = {
91+ tabMoved = tab == selectedNav
7192 selectedNav = tab
7293 selectedTabIndex = index
73- onSelectedChanged(tab)
7494 },
7595 onClick = { onClick(tab) }
7696 )
0 commit comments