解决常见问题

为 Android Wear 创建自定义表盘与创建通知和可穿戴式设备特定的 Activity 截然不同。本课将向您介绍在实现最初几个表盘时如何解决遇到的一些问题。

检测屏幕的形状

一些 Android Wear 设备具有方形屏幕,而其他设备则具有圆形屏幕。具有圆形屏幕的设备可在屏幕底部包含插边(或“下巴”)。如设计指南中所述,您的表盘应适应并利用屏幕的特定形状。

Android Wear 让您的表盘可以在运行时确定屏幕形状。要检测屏幕是方形还是圆形,请按照如下方式在 CanvasWatchFaceService.Engine 类中替换 onApplyWindowInsets() 函数:

private class Engine extends CanvasWatchFaceService.Engine {
    boolean mIsRound;
    int mChinSize;

    @Override
    public void onApplyWindowInsets(WindowInsets insets) {
        super.onApplyWindowInsets(insets);
        mIsRound = insets.isRound();
        mChinSize = insets.getSystemWindowInsetBottom();
    }
    ...
}

要在绘制表盘时适应您的设计,请检查 mIsRoundmChinSize 成员变量的值。

适应提示卡

图 1. 当通知卡出现时,一些模拟表盘需要进行调整。

:提示卡仅出现在 Wear 1.x 应用中。

在用户接收通知时,通知卡可能会占据大部分的屏幕,具体取决于系统界面样式。您的表盘应适应这些情况,确保用户在通知卡出现时仍能看到时间。

在通知卡出现时,模拟表盘可以作出调整,如缩小表盘,让表盘位于提示卡未覆盖的屏幕部分内。在提示卡未覆盖的屏幕区域显示时间的数字表盘通常不需要调整。要确定提示卡上的可用空间,以便适应您的表盘,请使用 WatchFaceService.Engine.getPeekCardPosition() 函数。

在微光模式下,提示卡拥有透明背景。在微光模式下,如果您的表盘在卡片附近包含详细信息,请考虑在详细信息周围绘制黑色矩形,以确保用户能够阅读卡片的内容。

配置系统指示器

要确保系统指示器保持可见,您可以配置它们在屏幕上的位置,以及它们在您创建 WatchFaceStyle 实例时是否需要背景保护:

  • 要设置状态栏的位置,请使用 setStatusBarGravity() 函数。
  • 要设置启动指令的位置,请使用 setHotwordIndicatorGravity() 函数。
  • 要以半透明灰色背景保护状态栏和启动指令,请使用 setViewProtection() 函数。如果您的表盘背景为浅色,这通常非常必要,因为系统指示器为白色。

如需了解与系统指示器有关的详细信息,请参阅配置系统界面和阅读设计指南

使用相对测量值

不同制造商的 Android Wear 设备的屏幕大小和分辨率各不相同。您的表盘应通过使用相对测量值而不是绝对像素值来适应这些变化。

在绘制表盘时,您可以使用 Canvas.getWidth()Canvas.getHeight() 函数获取画布的大小,并使用属于所检测屏幕大小一部分的值来设置图形元素的位置。如果您调整表盘元素的大小以响应提示卡,请使用属于提示卡上方剩余空间一部分的值来重新绘制您的表盘。