在JetStream tv 应用程序示例中,它有一个createInitialFocusRestorerModifiers()函数充当其子级 TvLazyRow/Column 的焦点恢复器。
正如该函数的 KDoc 中所述:
返回一组修饰符 [FocusRequesterModifiers],可用于恢复焦点并指定最初聚焦的项目。
其用法:
LazyRow(modifier.then(modifiers.parentModifier) {
item1(modifier.then(modifiers.childModifier) {...}
item2 {...}
item3 {...}
...
}
Run Code Online (Sandbox Code Playgroud)
正确的行为应该如下图所示。向下按 DPad 应聚焦到第一个项目,向上按应将焦点带到最后保存的状态焦点子项。
不过,这里的问题是它不能恢复对导航的关注[ popBackStack()],所以我尝试将上述功能与这个答案集成。
当前代码:
// var anItemHasBeenFocused: Boolean = false
// var lastFocusedItem: Pair<Int, Int> = ...
TvLazyRow(
modifier = focusRestorerModifiers.parentModifier,
pivotOffsets = PivotOffsets(parentFraction = 0F)
) {
itemsIndexed(items = items) { columnIndex, item ->
val focusRequester = remember { FocusRequester() }
RowItem(
modifier = Modifier
.focusRequester(focusRequester)
.ifElse(
condition = columnIndex …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose android-jetpack-compose-tv