每当您的应用播放媒体文件时,用户应该能够通过按下物理键盘上的 空格键 来暂停和恢复播放。
响应按键事件
基于 Jetpack Compose 或视图的应用以类似方式响应键盘按键:应用监听按键事件,过滤事件,并响应诸如 空格键 按键之类的操作。
1. 监听键盘事件
Compose
使用 Jetpack Compose,可在管理击键的布局内使用 onPreviewKeyEvent
或 onKeyEvent
修饰符
Column(modifier = Modifier.onPreviewKeyEvent { event ->
if (event.type == KeyEventType.KeyUp) {
...
}
...
})
或
Column(modifier = Modifier.onKeyEvent { event ->
if (event.type == KeyEventType.KeyUp) {
...
}
...
})
视图
在您应用的某个 Activity 中,替换 onKeyUp()
方法
Kotlin
override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { ... }
Java
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { ... }
每当松开按下的键时,都会调用该方法,因此每次击键只触发一次。
2. 过滤 空格键 按下操作
在 Compose onPreviewKeyEvent
和 onKeyEvent
修饰符方法或视图的 onKeyUp()
方法中,过滤 KeyEvent.KEYCODE_SPACE
以将正确的事件发送到您的媒体组件
Compose
Column(modifier = Modifier.onPreviewKeyEvent { event ->
if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
...
}
...
})
或
Column(modifier = Modifier.onKeyEvent { event ->
if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
...
}
...
})
视图
Kotlin
if (keyCode == KeyEvent.KEYCODE_SPACE) { togglePlayback() return true } return false
Java
if (keyCode == KeyEvent.KEYCODE_SPACE) { togglePlayback(); return true; } return false;
要点
KEYCODE_SPACE
:空格键 的键码常量。
Compose
onPreviewKeyEvent
:当组件(或其某个子项)获得焦点时,使组件能够拦截硬件按键事件的修饰符。onKeyEvent
:与onPreviewKeyEvent
类似,此修饰符使组件能够在组件(或其某个子项)获得焦点时拦截硬件按键事件。
视图
结果
您的应用现在可以响应 空格键 按键,以暂停和恢复视频或其他媒体。