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>
Булевы параметры можно использовать двумя способами:
Использование структуры
BooleanConfiguration
вScene
циферблата:<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> -->
В качестве альтернативы параметр конфигурации можно использовать в выражениях :
<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>
Подобно булевым параметрам, есть два способа использования:
Использование элемента
ListConfiguration
вScene
:<ListConfiguration id="bg_img"> <ListOption id="0"> <!-- Show background 0 --> </ListOption> <ListOption id="1"> <!-- Show background 1 ... etc --> </ListOption> </ListConfiguration>
В качестве альтернативы параметр конфигурации можно использовать в более сложных выражениях:
<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
. Пользователи могут выбрать тему по своему выбору в редакторе циферблата, и цвета из этой темы могут отображаться в определении вашего циферблата.
Например, чтобы определить тему с двумя записями и тремя цветами в теме:
Расслабленный | |||
Городской |
Определите 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
без индекса.
Затем пользователь может выбрать понравившуюся ему тему в редакторе циферблата.
Вкусы
Примечание : варианты оформления поддерживаются в формате циферблата версии 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>
Вы определили:
- Конфигурация цветовой темы, позволяющая пользователю выбирать, какую цветовую тему применить. Вы определили две темы: одну цветную и одну монохромную.
- Список вариантов внешнего вида часов. Вы определили два варианта: большие, смелые часы и более минималистичные часы.
- Выбор, отображать ли частоту сердечных сокращений пользователя на циферблате.
Кроме того, на циферблате часов есть ComplicationSlot
.
Вы решаете, что есть два Flavors
, которые вы хотите выделить для пользователя. Существует множество других возможных комбинаций всех этих настроек, но вот те, которые, по вашему мнению, работают лучше всего:
- Спортивный вкус : Он будет состоять из:
- Яркая цветовая тема, которая зарядит вас энергией и сделает активным (ID: 0)
- Большие и смелые часы, которые можно видеть во время тренировки (ID: 0)
- Частота сердечных сокращений отображается на циферблате часов для справки
- Слот усложнения, показывающий количество шагов
- Изысканный вкус : Он будет состоять из:
- Монохромная цветовая гамма, подходящая к любому наряду (ID: 1)
- Минималистичные часы, которые хорошо впишутся в любую обстановку (ID: 1)
- На циферблате не отображается частота сердечных сокращений
- Слот усложнения не включен
Для включения разновидностей требуется включить в watch_face_info.xml
:
<?xml version="1.0" encoding="utf-8"?>
<WatchFaceInfo>
...
<MultipleInstancesAllowed value="true" />
<FlavorsSupported value="true" />
</WatchFaceInfo>
Затем каждый Flavor определяется в 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>