Compose中对于KeyEvent的处理

在开发Android TV时,遇到了一个需求,需要对遥控器发出的上下左右按键点击事件做处理。此处我们可以在Modifier.onKeyEvent中对按键事件做处理。此处我写了一个按钮的modifier模板如下。

private val buttonModifier = Modifier.onKeyEvent {
    when {
        KeyEventType.KeyDown == it.type -> {
            when (it.key) {
                Key.DirectionUp -> true
                Key.DirectionDown -> true
                else -> false
            }
        }

        else -> false
    }
}

首先我们来看返回值。在这个模板中我对按钮接收到上下按键不做处理,而这是通过返回true值实现的。返回的true表示该按键事件已被消费,将不会再传递到下一级;而false则会继续传递。此处我返回true可以使得焦点无法向上或向下传递,相应的,返回false将不会阻碍焦点传递。

其次是监听按键的类型。此处我对传入的KeyEvent的typekey两个值做了过滤,前者包括KeyDown和KeyUp以及Unknown三个状态,分别代表按下按键、抬起按键以及未知的按键事件;后者则反映了具体点击的是什么按键。

后续可以引用这个模板,并对其进行更进一步的定制。

Button(
    onClick = { // button的点击事件 },
    modifier = buttonModifier
        .onKeyEvent {
            when {
                KeyEventType.KeyDown == it.type && Key.DirectionRight == it.key -> {
                    // 对向右按键的事件响应
                    false
                }

                else -> false
            }
        }
) {
    Text(text = "+")
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值