Как задать конфигурации пользователей

UserConfigurations позволяет создавать варианты, из которых пользователь может выбрать один. Вы можете настроить внешний вид элементов циферблата в зависимости от выбранных значений.

Варианты конфигурации пользователя:

  • BooleanConfiguration – обычно используется, когда пользователь может выбрать, показывать элемент или нет, или выбрать один из двух стилей.
  • ListConfiguration – предоставляет пользователю ряд вариантов. Например, если на циферблате можно выбрать один из четырех фоновых рисунков,
  • ColorConfiguration – определяет цветовые темы, из которых пользователь может выбрать подходящую.

Логические варианты

Логические параметры – это, пожалуй, самый простой тип пользовательских конфигураций. Они могут быть определены следующим образом:

<!-- Under WatchFace element -->
<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>

Логические параметры можно использовать двумя способами:

  1. Используйте структуру BooleanConfiguration в циферблате Scene:

    <!-- Within the main Scene of the watch face -->
    <BooleanConfiguration id="show_date">
        <BooleanOption id="TRUE">
            <!-- ...Content when date required -->
        </BooleanOption>
        <BooleanOption id="FALSE">
            <!-- ...Content when date not required -->
        </BooleanOption>
    </BooleanConfiguration>

    Обратите внимание, что параметры конфигурации нельзя вкладывать друг в друга.

  2. Также параметр конфигурации можно использовать в выражениях:

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

Стили списка

Варианты в списке работают так же, как и логические варианты. Например, чтобы предоставить пользователю список фоновых изображений на выбор, сделайте следующее:

<!-- Under WatchFace element -->
<UserConfigurations>
    <ListConfiguration id="background_image" displayName="background_image_label"
        icon="background_option_icon"
        screenReaderText="background_image_label" defaultValue="0">
        <ListOption id="0" displayName="background0_image_label"
            screenReaderText="background0_image_label" icon="background0_icon" />
        <ListOption id="1" displayName="background1_image_label"
            screenReaderText="background1_image_label" icon="background1_icon" />
        ...
    </ListConfiguration>
</UserConfigurations>

Как и в случае с логическими параметрами, это можно сделать двумя способами:

  1. Использование элемента ListConfiguration в Scene:

    <!-- Within the main Scene of the watch face -->
    <ListConfiguration id="background_image">
        <ListOption id="0">
            <!-- ...Content for option 0 -->
        </ListOption>
        <ListOption id="1">
            <!-- ...Content for option 1 -->
        </ListOption>
    </ListConfiguration>

  2. Кроме того, параметр конфигурации можно использовать в более сложных выражениях:

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

Цветовые темы

Watch Face Format позволяет задавать цветовые темы с помощью тега ColorConfiguration. Пользователи могут выбрать тему в редакторе циферблата, и цвета из этой темы будут использоваться в определении циферблата.

Например, чтобы задать тему с двумя записями и тремя цветами, определите ColorConfiguration следующим образом:

<!-- Under WatchFace element -->
<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>

Их можно использовать в качестве источников данных вместо шестнадцатеричных кодов цветов. Обратите внимание, как указывается значение индекса, чтобы выбрать первый, второй или третий элемент темы:

<AnalogClock x="0" y="0" width="450" height="450">
    <HourHand resource="hour" x="220" y="55" width="20" height="190"
        pivotX="0.5" pivotY="0.9210"
        tintColor="[CONFIGURATION.myThemeColor.0]"/>
    <MinuteHand resource="minute" x="222" y="30" width="16" height="220"
        pivotX="0.5" pivotY="0.9"
        tintColor="[CONFIGURATION.myThemeColor.1]"/>
    <SecondHand resource="second" x="226" y="20" width="8" height="245"
        pivotX="0.5" pivotY="0.8571"
        tintColor="[CONFIGURATION.myThemeColor.2]"/>
</AnalogClock>

Если для каждого атрибута ColorOption задан только один цвет, его можно указать как CONFIGURATION.myThemeColor без индекса. Затем пользователь может выбрать нужную тему в редакторе циферблата.

Вкусы

Примечание. Варианты поддерживаются в Watch Face Format версии 2 и выше.

UserConfigurations предоставляют пользователю большую гибкость, но с увеличением количества элементов конфигурации число комбинаций может стать слишком большим.

Flavors позволяет задавать наборы настроек для UserConfigurations, которые вы считаете важными.

Затем пользователь может выбрать один из этих вариантов в сопутствующем приложении или продолжить выбирать каждое значение конфигурации по отдельности.

Например, вы создали циферблат с тремя настройками:

  1. Конфигурация цветовой темы, позволяющая пользователю выбрать, какую цветовую тему применить. Вы определили две темы: одну цветную и одну монохромную.
  2. Список фонов. Вы определили два варианта, которые может выбрать пользователь.
  3. Возможность показывать на циферблате частоту сердечных сокращений пользователя.

Кроме того, на циферблате есть значок ComplicationSlot.

Вы решили, что хотите выделить для пользователя два Flavors. Существует множество других возможных комбинаций всех этих настроек, но вы считаете, что лучше всего работают следующие:

  1. Спортивный стиль включает:
    1. Яркая цветовая тема, которая поможет вам взбодриться и стать активнее (ID: 0).
    2. Первое фоновое изображение (идентификатор: 0)
    3. Пульс, отображаемый на циферблате часов.
    4. Место для дополнения, на котором показывается количество шагов
  2. Изысканный вкус, который состоит из:
    1. Монохромная цветовая тема, которая подойдет к любой одежде (ID: 1).
    2. Второе фоновое изображение (идентификатор: 1)
    3. На циферблате не показывается пульс
    4. Слот для дополнения не включен

Чтобы использовать варианты, их нужно включить в watch_face_info.xml. Для этого в файле watch_face_info.xml элемент FlavorsSupported должен иметь значение value="true".

Каждый вариант определяется в UserConfigurations следующим образом:

<!-- Under UserConfigurations -->
<Flavors defaultValue="sporty_flavor">
    <Flavor id="sporty_flavor"
        displayName="flavor_sporty_label" screenReaderText="flavor_sporty_label">
        <Configuration id="theme_color" optionId="0"/>
        <Configuration id="background_image" optionId="0"/>
        <Configuration id="show_hr" optionId="TRUE"/>
        <ComplicationSlot slotId="0">
            <DefaultProviderPolicy
                defaultSystemProvider="STEP_COUNT"
                defaultSystemProviderType="SHORT_TEXT"/>
        </ComplicationSlot>
    </Flavor>
    <Flavor id="sophisticated_flavor"
        displayName="flavor_sophisticated_label" screenReaderText="flavor_sophisticated_label">
        <Configuration id="theme_color" optionId="1"/>
        <Configuration id="background_image" optionId="1"/>
        <Configuration id="show_hr" 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>