Define los parámetros de configuración del usuario

UserConfigurations te permite crear opciones entre las que el usuario puede elegir. Puedes ajustar la apariencia de los elementos de la cara de reloj según los valores elegidos.

Las opciones de configuración del usuario pueden ser las siguientes:

  • BooleanConfiguration: Por lo general, se usa cuando el usuario puede mostrar un elemento o no, o elegir entre dos estilos.
  • ListConfiguration: Proporciona al usuario un rango de opciones. Por ejemplo, si la cara de reloj tuviera cuatro imágenes de fondo diferentes para elegir
  • ColorConfiguration: Define temas de color, de los cuales el usuario puede seleccionar su tema preferido.

Opciones booleanas

Las opciones booleanas son quizás las más simples de las configuraciones de usuario. Se pueden definir de la siguiente manera:

<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>

Las opciones booleanas se pueden usar de dos maneras:

  1. Usa la estructura BooleanConfiguration dentro de Scene de la cara de reloj:

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

    Ten en cuenta que las opciones de configuración no se pueden anidar en su uso, por lo que lo siguiente no es válido:

    <!-- 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. Como alternativa, la opción de configuración se puede usar en expresiones:

    <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>
    

Opciones de lista

Las opciones de lista funcionan de manera muy similar a las opciones booleanas. Por ejemplo, para proporcionar una lista de imágenes de fondo para que el usuario elija, haz lo siguiente:

<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>

Al igual que con las opciones booleanas, hay dos maneras de usar esto:

  1. Usa el elemento ListConfiguration en Scene:

    <ListConfiguration id="bg_img">
      <ListOption id="0">
        <!-- Show background 0 -->
      </ListOption>
      <ListOption id="1">
        <!-- Show background 1 ... etc -->
      </ListOption>
    </ListConfiguration>
    
  2. Como alternativa, la opción de configuración se puede usar en expresiones más complejas:

    <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>
    

Temas de color

El Formato de Caras de Relojes te permite definir temas de color a través de ColorConfiguration. Los usuarios pueden seleccionar el tema que deseen en el editor de caras de reloj, y los colores de este tema pueden aparecer en toda la definición de la cara de reloj.

Por ejemplo, para definir un tema con dos entradas y tres colores, haz lo siguiente:

Relajada

Urban

Define un ColorConfiguration de la siguiente manera:

<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>

Luego, se pueden usar como fuentes de datos en lugar de valores de color hexadecimal. Observa cómo se especifica el valor del índice para seleccionar el primer, segundo o tercer elemento del tema:

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

En el caso específico en el que cada ColorOption solo tiene un color definido, también es posible hacer referencia a él como CONFIGURATION.myThemeColor, sin el índice.

INSERT ALT TEXT HERE INSERT ALT TEXT HERE

Luego, el usuario puede seleccionar la entrada de tema que desee en el editor de caras de reloj.

Sabores

Nota: Los tipos se admiten en la versión 2 y posteriores del Formato de Caras de Relojes.

UserConfigurations le brinda al usuario mucha flexibilidad, pero a medida que aumentas la cantidad de elementos de configuración que defines, la cantidad de combinaciones puede crecer de manera abrumadora.

Flavors te permite definir parámetros predeterminados para los UserConfigurations que consideres que vale la pena destacar.

Luego, el usuario puede seleccionar entre estas variantes predeterminadas dentro de la app complementaria o seguir eligiendo cada valor de configuración de forma individual.

Por ejemplo, considera una cara de reloj en la que defines tres parámetros de configuración (se omitieron los elementos internos y los detalles de los atributos para mayor claridad):

<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>

Definiste lo siguiente:

  1. Una configuración de tema de color que le permite al usuario seleccionar qué tema de color aplicar. Definiste dos temas, uno colorido y uno monocromático.
  2. Una lista de opciones de apariencia del reloj. Definiste dos opciones: un reloj grande y en negrita, y un reloj de aspecto más minimalista.
  3. Es la opción de mostrar o no la frecuencia cardíaca del usuario en la cara de reloj.

Además, tienes un ComplicationSlot en la cara de reloj.

Decides que hay dos Flavors que quieres destacarle al usuario. Hay muchas más combinaciones posibles de todos estos parámetros de configuración, pero estas son las que crees que funcionan mejor:

  1. Un estilo deportivo: Esto consistirá en lo siguiente:
    1. El tema de colores brillantes, para energizarte y activarte (ID: 0)
    2. El reloj grande y en negrita para que se pueda ver mientras se hace ejercicio (ID: 0)
    3. Frecuencia cardíaca que se muestra en la cara de reloj como referencia
    4. El espacio para complicación que muestra el recuento de pasos
  2. Un sabor sofisticado: Esto consistirá en lo siguiente:
    1. El tema de color monocromático, para combinar con cualquier atuendo (ID: 1)
    2. El reloj minimalista, para adaptarse bien a cualquier entorno (ID: 1)
    3. No se muestra la frecuencia cardíaca en la cara de reloj
    4. El espacio para complicación no está habilitado

Los tipos de variantes deben habilitarse en watch_face_info.xml:

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

Luego, cada variante se define dentro de UserConfigurations de la siguiente manera:

<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>