使用键盘空格键暂停和继续播放媒体

四星评级图标

针对大屏幕的优化包括处理外接键盘输入内容的功能,例如对用户按空格键做出响应,以暂停或继续播放视频和其他媒体。这尤其适用于通常连接到外接键盘的平板电脑,以及通常附带外接键盘但可在平板电脑模式下使用的 Chromebook。

当媒体是窗口中唯一的元素(例如全屏视频播放)时,在 Jetpack Compose 中,在屏幕级别响应按键事件。

最佳做法

每当您的应用播放媒体文件时,用户都应该能够通过按实体键盘上的空格键暂停和继续播放。

所需要素

  • KEYCODE_SPACE:空格键的关键代码常量。
  • onPreviewKeyEvent:此 Modifier 让组件可在自身(或其子项之一)获得焦点时拦截硬件按键事件。
  • onKeyEvent:与 onPreviewKeyEvent 类似,此 Modifier 让组件可在自身(或其子项之一)获得焦点时拦截硬件按键事件。

步骤

如需在 Jetpack Compose 中响应键盘按键操作,您的应用必须监听按键事件、过滤事件并响应所选的按键操作,例如按下空格键。

1. 监听键盘事件

使用 Jetpack Compose 时,您可以在管理按键操作的组件中使用 onPreviewKeyEventonKeyEvent 修饰符。

这两个修饰符之间的主要区别在于,相应修饰符会将未使用的事件分派到何处:

  • onPreviewKeyEvent - 将该事件分派给其第一个子项。
  • onKeyEvent - 将该事件分派给可组合项的父项。

2. 过滤和处理对空格键的按键操作

onPreviewKeyEventonKeyEvent 修饰符 lambda 中,过滤键释放 (KeyEventType.KeyUp) 与空格键 (Key.Spacebar) 匹配的按键事件。

如果您的代码负责处理该事件,并且您不希望该事件进一步传播,则返回 true。返回 false 以允许其他组件处理该事件。

  • 方法 A:使用 onPreviewKeyEvent

    Column(
        modifier = Modifier.onPreviewKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

  • 选项 B:使用 onKeyEvent

    Column(
        modifier = Modifier.onKeyEvent { event ->
            if (event.type == KeyEventType.KeyUp && event.key == Key.Spacebar) {
                // Handle spacebar keypress to pause/resume playback.
                true
            } else {
                false
            }
        }
    ) {
        // Content
    }

结果

您的应用现在可以响应对空格键的按键操作,以暂停和继续播放视频或其他媒体。

其他资源

如需详细了解键盘事件以及如何管理这些事件,请参阅处理键盘输入