穿戴式设备上通常会有多个实体按钮,也称为“表把按钮”。所有 Wear OS 设备都至少有一个按钮,即电源按钮。除此之外,还可能会有多个多功能按钮(也可能没有)。
在您的应用中,您可以为操作分配多功能按钮。例如,健身应用可以使用多功能按钮开始或暂停锻炼:
![](https://developer.android.google.cn/static/wear/images/multi_function_buttons.png?authuser=5&hl=ca)
注意:Wear OS 3.0 会为操作系统预留两个按钮,而 Wear OS 2.0 则只会预留一个按钮。这样,您可以为操作分配的按钮数量便会减少。
如需了解合适的用例和设计注意事项,请查看 Wear OS 设计指南。
本指南介绍了如何检索设备上可用的多功能按钮的相关信息,以及如何处理按钮按下动作。
按钮元数据
如需获取有关设备上按钮的额外信息,请使用 Wear Input AndroidX 库中定义的 API。请在应用模块的 build.gradle
文件中添加以下依赖项:
dependencies { implementation "androidx.wear:wear-input:1.0.0" }
按钮数量
如需了解设备上可用的按钮数量,请使用 WearableButtons.getButtonCount()
方法。此方法的搜索范围包括电源按钮,因此,如果此方法返回的值大于 1,则表示有多功能按钮可供使用。将此返回的值减去 1 即为可分配的多功能按钮的准确总数,因为第一个按钮始终是电源按钮。
按钮按下动作的键码
每个按钮将被映射到 KeyEvent
类中的一个 int
常量,如下表所示:
按钮 | KeyEvent |
---|---|
多功能按钮 1 | KEYCODE_STEM_1
|
多功能按钮 2 | KEYCODE_STEM_2
|
多功能按钮 3 | KEYCODE_STEM_3
|
以下示例代码展示了如何获取可用按钮的数量:
Kotlin
val count = WearableButtons.getButtonCount(context) if (count > 1) { // There are multifunction buttons available } val buttonInfo = WearableButtons.getButtonInfo(activity, KeyEvent.KEYCODE_STEM_1) if (buttonInfo == null) { // KEYCODE_STEM_1 is unavailable } else { // KEYCODE_STEM_1 is present on the device }
Java
int count = WearableButtons.getButtonCount(context); if (count > 1) { // There are multifunction buttons available } WearableButtons.ButtonInfo buttonInfo = WearableButtons.getButtonInfo(activity, KeyEvent.KEYCODE_STEM_1); if (buttonInfo == null) { // KEYCODE_STEM_1 is unavailable } else { // KEYCODE_STEM_1 is present on the device }
处理按钮按下动作
您的应用可以处理多个可能的按钮键码,如下所示:
-
KEYCODE_STEM_1
-
KEYCODE_STEM_2
-
KEYCODE_STEM_3
您的应用可以接收这些键码,并将其转换为特定的应用内操作。
如需处理按钮按下动作,请实现 onKeyDown()
方法。
例如,以下实现可响应某个按钮按下动作,以控制应用中的操作:
Kotlin
// Activity override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { return if (event.repeatCount == 0) { when (keyCode) { KeyEvent.KEYCODE_STEM_1 -> { // Do stuff true } KeyEvent.KEYCODE_STEM_2 -> { // Do stuff true } KeyEvent.KEYCODE_STEM_3 -> { // Do stuff true } else -> { super.onKeyDown(keyCode, event) } } } else { super.onKeyDown(keyCode, event) } }
Java
@Override // Activity public boolean onKeyDown(int keyCode, KeyEvent event){ if (event.getRepeatCount() == 0) { if (keyCode == KeyEvent.KEYCODE_STEM_1) { // Do stuff return true; } else if (keyCode == KeyEvent.KEYCODE_STEM_2) { // Do stuff return true; } else if (keyCode == KeyEvent.KEYCODE_STEM_3) { // Do stuff return true; } } return super.onKeyDown(keyCode, event); }
确定按钮位置
AndroidX 库提供了两种描述按钮位置的方法:
WearableButtons.getButtonLabel()
:返回一个本地化后的字符串,描述设备上按钮的常规位置。WearableButtons.getButtonIcon()
:返回一个图标,表示设备上按钮的常规位置。
注意:在描述按钮及其功能时,我们建议您不要使用文本描述符,而改用直观的指示符。不过,在某些情况下,可能描述按钮更有意义。
前述方法专为简单的描述而设计。如果这些 API 不符合您的应用需求,您还可以使用 WearableButtons.getButtonInfo()
API 获取按钮在屏幕上的位置,并以更加个性化的方式对其进行处理。如需详细了解这些 API,请参阅 Wear API 参考文档。