每当您的应用播放媒体文件时,用户都应该能够通过按实体键盘上的空格键暂停和继续播放。
响应按键事件
基于 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
修饰符方法或 View 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
类似,此修饰符让组件可在自身(或其子项之一)获得焦点时拦截硬件按键事件。
视图
结果
您的应用现在可以响应对空格键的按键操作,以暂停和继续播放视频或其他媒体。