Jetpack Compose:在 Android TV 中使用遥控器触发 onClick 事件

问题描述 投票:0回答:1

我正在使用 Jetpack Compose 构建我的 Android TV 应用程序,我正在尝试在某些

Text
组件上触发一些 onClick 事件。

我已经实现了

Modifier.focusable
,所以它可以使用遥控器聚焦,并且我已经实现了
Modifier.clickable
在点击组件时启动。

但是,当我在模拟器上启动应用程序时,我可以正确地聚焦并选择组件,因为我可以看到背景颜色的变化,但是我无法在按下 OK 按钮时触发

Modifier.clickable
内的事件在我的遥控器上(在我的例子中是
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 组件也不起作用。

android-jetpack-compose android-tv android-jetpack-compose-tv
1个回答
4
投票

为了将来参考,这是固定的,应该从 1.1.0-beta01 开始工作。 Dpad 中心和回车键现在都会触发对焦点视图的点击。如果你想处理其他键(例如,游戏控制器),你可以使用 Modifier.onKeyEvent.

© www.soinside.com 2019 - 2024. All rights reserved.