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

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. Использование структуры 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> -->
    
  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. Использование элемента ListConfiguration в Scene :

    <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 . Пользователи могут выбрать тему по своему выбору в редакторе циферблата, и цвета из этой темы могут отображаться в определении вашего циферблата.

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

Расслабленный

Городской

Определите 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>

Вы определили:

  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>

Затем каждый 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>