Jetpack Compose:在 Android 电视中使用遥控器触发 onClick 事件
Jetpack Compose: Firing onClick events using a remote control in Android TV
我正在使用 Jetpack Compose 构建我的 Android TV 应用程序,我正在尝试在某些 Text 组件上触发一些 onClick
事件。
我已经实现了 Modifier.focusable
,所以它可以使用遥控器聚焦,我已经实现了 Modifier.clickable
在点击组件时启动。
但是,当我在模拟器上启动应用程序时,我可以正确地聚焦和 select 组件,因为我可以看到背景颜色的变化,但我无法触发内部事件 Modifier.clickable
当按下遥控器上的 OK 按钮时(在我的例子中是 KEYCODE_DPAD_CENTER
)。但是,如果我在模拟器内单击鼠标,则会触发该事件。
这是我的代码
@Composable
fun FocusablePill(text: String, focusRequester: FocusRequester = FocusRequester()) {
val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()
val isPressed by interactionSource.collectIsPressedAsState()
val color = if (isFocused || isPressed) action else lightTranslucent_10
val shape = RoundedCornerShape(CornerSize(24.dp))
Text(
text = text,
color = MaterialTheme.colors.onPrimary,
style = MaterialTheme.typography.button,
modifier = Modifier
.focusRequester(focusRequester)
.focusable(
interactionSource = interactionSource
)
.clickable(
interactionSource = interactionSource,
indication = null //this is just cosmetic, setting LocalIndication.current still doesn't work
) {
onCommandEntered(text)
}
.background(color, shape)
.padding(16.dp, 8.dp)
)
}
我也试过 Modifier.selectable
,但结果是一样的。事件仅在鼠标单击时触发。此外,使用 Button 组件也不起作用。
为了将来参考,此问题已修复并且应该从 1.1.0-beta01 开始工作。 Dpad 中心和回车键现在都会触发对焦点视图的点击。如果你想处理其他键(例如,游戏控制器),你可以使用 Modifier.onKeyEvent.
我正在使用 Jetpack Compose 构建我的 Android TV 应用程序,我正在尝试在某些 Text 组件上触发一些 onClick
事件。
我已经实现了 Modifier.focusable
,所以它可以使用遥控器聚焦,我已经实现了 Modifier.clickable
在点击组件时启动。
但是,当我在模拟器上启动应用程序时,我可以正确地聚焦和 select 组件,因为我可以看到背景颜色的变化,但我无法触发内部事件 Modifier.clickable
当按下遥控器上的 OK 按钮时(在我的例子中是 KEYCODE_DPAD_CENTER
)。但是,如果我在模拟器内单击鼠标,则会触发该事件。
这是我的代码
@Composable
fun FocusablePill(text: String, focusRequester: FocusRequester = FocusRequester()) {
val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()
val isPressed by interactionSource.collectIsPressedAsState()
val color = if (isFocused || isPressed) action else lightTranslucent_10
val shape = RoundedCornerShape(CornerSize(24.dp))
Text(
text = text,
color = MaterialTheme.colors.onPrimary,
style = MaterialTheme.typography.button,
modifier = Modifier
.focusRequester(focusRequester)
.focusable(
interactionSource = interactionSource
)
.clickable(
interactionSource = interactionSource,
indication = null //this is just cosmetic, setting LocalIndication.current still doesn't work
) {
onCommandEntered(text)
}
.background(color, shape)
.padding(16.dp, 8.dp)
)
}
我也试过 Modifier.selectable
,但结果是一样的。事件仅在鼠标单击时触发。此外,使用 Button 组件也不起作用。
为了将来参考,此问题已修复并且应该从 1.1.0-beta01 开始工作。 Dpad 中心和回车键现在都会触发对焦点视图的点击。如果你想处理其他键(例如,游戏控制器),你可以使用 Modifier.onKeyEvent.