The Android Developer Challenge is back! Submit your idea before December 2.

解决表盘相关问题

针对“Wear OS by Google 谷歌”创建自定义表盘与创建通知和特定于穿戴式设备的 Activity 截然不同。本课程向您介绍如何解决在实现最初几个表盘时可能会遇到的一些问题。

请参阅以下相关资源:

检测屏幕的形状

一些 Wear OS 设备具有方形屏幕,还有一些设备则具有圆形屏幕。圆形屏幕设备的屏幕底部可能会有插边(俗称“下巴”)。如设计指南中所述,您的表盘应适应并利用屏幕的特定形状。

Wear OS 可让您的表盘在运行时确定屏幕形状。要检测屏幕是方形还是圆形,请替换 CanvasWatchFaceService.Engine 类中的 onApplyWindowInsets() 方法,如下所示:

Kotlin

    private inner class Engine : CanvasWatchFaceService.Engine() {
        internal var mIsRound: Boolean = false
        internal var chinSize: Int = 0

        override fun onApplyWindowInsets(insets: WindowInsets) {
            super.onApplyWindowInsets(insets)
            mIsRound = insets.isRound
            chinSize = insets.systemWindowInsetBottom
        }
        ...
    }
    

Java

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

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

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

适应提示卡片

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

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

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

在微光模式下,提示卡片具有透明背景。在微光模式下,如果表盘包含的一些详细信息在卡片附近,不妨考虑在其周围绘制一个黑色矩形,以确保用户能够看清卡片的内容。

配置系统指示器

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

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

如需详细了解系统指示器,请参阅配置系统界面设计指南

使用相对测量值

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

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