实体按钮

穿戴式设备上通常会有多个实体按钮,也称为“表把按钮”。所有 Wear OS 设备都至少有一个按钮,即电源按钮。除此之外,还可能会有多个多功能按钮(也可能没有)。

在您的应用中,您可以为操作分配多功能按钮。例如,健身应用可以使用多功能按钮开始或暂停锻炼:

注意: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 库提供了两种描述按钮位置的方法:

注意:在描述按钮及其功能时,我们建议您不要使用文本描述符,而改用直观的指示符。不过,在某些情况下,可能描述按钮更有意义。

前述方法专为简单的描述而设计。如果这些 API 不符合您的应用需求,您还可以使用 WearableButtons.getButtonInfo() API 获取按钮在屏幕上的位置,并以更加个性化的方式对其进行处理。如需详细了解这些 API,请参阅 Wear API 参考文档