实体按钮

可穿戴设备通常包含多个实体按钮,也称为_表冠_。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() 方法。此方法包含电源按钮,因此如果该方法返回的值大于一,则表示有可用的多功能按钮。要获得可分配的多功能按钮的准确数量,请从计数中减去一,因为第一个按钮始终是电源按钮。

按钮按下的键码

每个按钮都映射到 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 参考