定义用户配置

UserConfigurations 可让您创建供用户选择的选项。您可以根据所选值调整表盘元素的外观。

用户配置选项可以是:

  • BooleanConfiguration:通常用于用户可以选择是否显示某个元素或在两种样式之间进行选择的位置
  • ListConfiguration:为用户提供一系列选项。例如,如果表盘有四张不同的背景图片可供选择
  • ColorConfiguration:定义颜色主题,用户可以从中选择首选主题。

布尔值选项

布尔值选项可能是最简单的用户配置。它们可以定义如下:

<WatchFace ...>
  <UserConfigurations>
   <!-- show_date and show_date_label defined in res/values/strings.xml -->
    <BooleanConfiguration id="show_date"
        displayName="show_date_label"
        screenReaderText="show_date_label"
        defaultValue="TRUE"
    />
  </UserConfigurations>
  ...
</WatchFace>

然后,布尔值选项可通过以下两种方式使用:

  1. 在表盘 Scene 中使用 BooleanConfiguration 结构:

    <Scene>
        <BooleanConfiguration id="show_date">
            <BooleanOption id="TRUE">
            <!-- ...Content to show date -->
            </BooleanOption>
            <BooleanOption id="FALSE">
            <!-- ...Content when date not required -->
            </BooleanOption>
        </BooleanConfiguration>
    </Scene>
    

    请注意,配置选项在使用时不能嵌套,因此以下代码无效

    <!-- Will not work -->
    <!-- <Scene>
      <BooleanConfiguration id="show_date">
        <BooleanOption id="TRUE">
          <BooleanConfiguration id="show_time">
            <BooleanOption id="TRUE">
              Content intended for when show_date and show_time both set to TRUE
            </BooleanOption>
          </BooleanConfiguration>
        </BooleanOption>
      </BooleanConfiguration>
    </Scene> -->
    
  2. 或者,您也可以在表达式中使用该配置选项:

    <Condition>
    <Expressions>
        <Expression name="my_expression">
            <!-- Use show_date as part of a more complex evaluation -->
            <![CDATA[[CONFIGURATION.show_date] == "TRUE" && ... ]]>
        </Expression>
        </Expressions>
        <Compare expression="my_expression">
            <!-- Content goes here -->
        </Compare>
    </Condition>
    

列表选项

列表选项的运作方式与布尔值选项非常相似。例如,如需提供供用户选择的背景图片列表,请执行以下操作:

<ListConfiguration id="bg_img" displayName="bg_img_lbl" icon="bg_img_ico"
    screenReaderText="bg_img_lbl" defaultValue="0">
  <ListOption id="0" displayName="bg0_lbl" screenReaderText="b0_lbl" icon="bg0_ico" />
  <ListOption id="1" displayName="bg1_lbl" screenReaderText="bg1_lbl" icon="bg1_ico" />
  ...
</ListConfiguration>

与布尔值选项类似,您可以通过以下两种方式使用此属性:

  1. Scene 中使用 ListConfiguration 元素:

    <ListConfiguration id="bg_img">
      <ListOption id="0">
        <!-- Show background 0 -->
      </ListOption>
      <ListOption id="1">
        <!-- Show background 1 ... etc -->
      </ListOption>
    </ListConfiguration>
    
  2. 或者,您也可以在更复杂的表达式中使用该配置选项:

    <Condition>
      <Expressions>
          <Expression name="background_zero_and_something_else">
            <!-- Use bg_img as part of a more complex evaluation -->
            <![CDATA[[CONFIGURATION.bg_img] == "0" && ... ]]>
          </Expression>
        </Expressions>
        <Compare expression="background_zero_and_something_else">
            <!-- Content goes here -->
        </Compare>
    </Condition>
    

颜色主题

借助表盘格式,您可以通过 ColorConfiguration 定义颜色主题。用户可以在表盘编辑器中选择所需的主题,并且此主题中的颜色可能会显示在表盘定义的各个部分。

例如,如需定义一个主题,其中包含两个条目和三种颜色,请执行以下操作:

放宽

Urban

按如下方式定义 ColorConfiguration

<UserConfigurations>
  <ColorConfiguration id="myThemeColor" displayName="theme_label" defaultValue="0">
    <ColorOption id="0" displayName="relaxed_label" colors="#3083dc #f8ffe5 #7dde92" />
    <ColorOption id="1" displayName="urban_label" colors="#f4b393 #fc60a8 #7a28cb" />
  </ColorConfiguration>
</UserConfigurations>

然后,这些值可用作数据源,而不是十六进制颜色值。请注意如何指定索引值以选择主题的第一个、第二个或第三个元素:

<HourHand resource="hour" ... tintColor="[CONFIGURATION.myThemeColor.0]" />
<MinuteHand resource="minute" ... tintColor="[CONFIGURATION.myThemeColor.1]" />
<SecondHand resource="second" ... tintColor="[CONFIGURATION.myThemeColor.2]" />

在每个 ColorOption 仅定义一种颜色的特殊情况下,也可以将其引用为 CONFIGURATION.myThemeColor,而无需索引。

INSERT ALT TEXT HERE INSERT ALT TEXT HERE

然后,用户可以在表盘编辑器中选择所需的主题条目。

口味

注意:表盘格式 2 及更高版本支持变种。

UserConfigurations 为用户提供了很大的灵活性,但随着您定义的配置元素数量的增加,组合数量可能会大幅增加。

借助 Flavors,您可以为您认为值得突出显示的 UserConfigurations 定义预设值

然后,用户可以在配套应用中从这些预设变种中进行选择,也可以继续单独选择每个配置值。

例如,假设您在表盘中定义了三项设置(为方便起见,省略了内部元素和属性的详细信息):

<UserConfigurations>
  <ColorConfiguration id="themeColor" ...>
    <ColorOption id="0" displayName="bright_label" ... />
    <ColorOption id="1" displayName="monochrome_label" ... />
  </ColorConfiguration>
  <ListConfiguration id="clockAppearance" ... >
    <ListOption id="0" displayName="big_and_bold_label" ... />
    <ListrOption id="1" displayName="minimal_label" ... />
  </ListConfiguration>
  <BooleanConfiguration id="showHr" ... />
</UserConfigurations>

您已定义:

  1. 颜色主题配置,允许用户选择要应用的颜色主题。您已定义两个主题,一个是彩色主题,一个是单色主题。
  2. 时钟外观选项列表。您已定义两个选项,一个是粗体大号时钟,另一个是外观更简约的时钟。
  3. 用于选择是否在表盘上显示用户的心率。

此外,表盘上还有一个 ComplicationSlot

您决定有两个 Flavors 需要向用户突出显示。所有这些设置还有很多可能的组合,但以下组合是您认为最有效的组合:

  1. 运动风格:包括:
    1. 明亮色彩主题,为您注入活力,让您充满活力(ID:0)
    2. 大号粗体时钟,便于在锻炼时查看(ID:0)
    3. 表盘上显示的心率(供参考)
    4. 显示步数的复杂功能显示槽
  2. 精致的口味:这包括:
    1. 单色主题,可搭配任何服装(ID:1)
    2. 最小时钟,适用于任何环境(ID:1)
    3. 表盘上未显示心率
    4. 复杂功能显示槽未启用

变种需要在 watch_face_info.xml 中启用:

<?xml version="1.0" encoding="utf-8"?>
<WatchFaceInfo>
    ...
    <MultipleInstancesAllowed value="true" />
    <FlavorsSupported value="true" />
</WatchFaceInfo>

然后,在 UserConfigurations 中定义每个变种,如下所示:

<Flavors defaultValue="sportyFlavor">
  <Flavor id="sportyFlavor" ... >
    <Configuration id="themeColor" optionId="0"/>
    <Configuration id="clockAppearance" optionId="0"/>
    <Configuration id="showHr" optionId="TRUE"/>
    <ComplicationSlot slotId="0">
      <DefaultProviderPolicy
              defaultSystemProvider="STEP_COUNT"
              defaultSystemProviderType="SHORT_TEXT"/>
    </ComplicationSlot>
  </Flavor>
  <Flavor id="sophisticatedFlavor" ... >
    <Configuration id="themeColor" optionId="1"/>
    <Configuration id="clockAppearance" optionId="1"/>
    <Configuration id="showHr" optionId="FALSE"/>
    <ComplicationSlot slotId="0">
      <!--
        Type here is set to empty to demonstrate how to hide a complication
        slot in Flavors.
      -->
      <DefaultProviderPolicy
              defaultSystemProvider="SUNRISE_SUNSET"
              defaultSystemProviderType="EMPTY"/>
    </ComplicationSlot>
  </Flavor>
</Flavors>