Definiowanie konfiguracji użytkowników

UserConfigurations umożliwiają tworzenie opcji, spośród których użytkownik może wybierać. Możesz dostosować wygląd elementów tarczy zegarka na podstawie wybranych wartości.

Opcje konfiguracji użytkownika mogą być następujące:

  • BooleanConfiguration: zwykle używana w przypadku, gdy użytkownik może wybrać, czy dany element ma być widoczny, czy nie, lub wybrać jeden z dwóch stylów
  • ListConfiguration: udostępnia użytkownikowi szereg opcji. Jeśli na przykład tarcza zegarka miała 4 różne obrazy tła do wyboru
  • ColorConfiguration: definiuje motywy kolorystyczne, spośród których użytkownik może wybrać preferowany.

Opcje logiczne

Wartości logiczne są prawdopodobnie najprostszą z konfiguracji użytkownika. Można je zdefiniować w ten sposób:

<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"
   >   <  defaultVal>ue="TRUE&<quot;
    >/
  /UserConfigurations
  ...
/WatchFace

Opcji logicznych można używać na 2 sposoby:

  1. Używanie struktury BooleanConfiguration w tarczy zegarka Scene:

    <Scene>
        <BooleanConfiguration id="show_>date"<;
            BooleanOption> id="<;TRUE"
            !-- ...Con>tent to s<how date --
      >      /Bo<oleanOption
            Bool>eanOption< id="FALSE"
            !-- ...Con>tent when< date not requ>ired <--
            /BooleanOp>t<ion
      >  /BooleanConfiguration
    /Scene
    

    Pamiętaj, że opcji konfiguracji nie można zagnieżdżać, dlatego ten kod nie jest prawidłowy:

    <!-- Will not work -->
    <!-- <Scene>
      <BooleanConfiguration id="show_>date&<quot;
        BooleanOption> id=&qu<ot;TRUE"
          BooleanConfigur>ation id=<"show_time"
     >       BooleanOption id="TRUE"
              Content intended for when show_date< and show_time> both s<et to TRUE
            /B>oolea<nOption
          >/Bo<oleanConfiguration
      > < /Boolean>Option
      /BooleanConfiguration
    /Scene --
    
  2. Opcję konfiguracji można też użyć w wyrażeniach:

    <Condition>
    <Expressions>
        <Expression name="my_expres>sion"<;
            !-- Use show_date as part of a more complex eva>luation -<-
            ![CDATA[[CONFIGURATION.show_date] &&== &quo>t;TRU<E"  ..>. ]]
    <    /Express>ion
     <   /Expressions
        Compare expres>sion=&quo<t;my_expression"
      >     < !-- Con>t<ent goes h>ere --
        /Compare
    /Condition
    

Opcje listy

Opcje listy działają bardzo podobnie do opcji logicznych. Aby na przykład udostępnić użytkownikowi listę obrazów tła do wyboru:

<ListConfiguration id="bg_img" displayName="bg_img_lbl" icon="bg_img_ico"
    screenReaderText>=&q<uot;bg_img_lbl" defaultValue="0"
  ListOption id="0" disp>lay<Name="bg0_lbl" screenReaderText="b0_lbl" icon="bg0_ico&quo>t; /
  <ListOption id=&quo>t;1" displayName="bg1_lbl" screenReaderText="bg1_lbl" icon="bg1_ico" /
  ...
/ListConfiguration

Podobnie jak w przypadku opcji logicznych, możesz użyć tego parametru na 2 sposoby:

  1. Używanie elementu ListConfiguration w elemencie Scene:

    <ListConfiguration id="bg>_im<g"
      ListOpt>ion i<d="0"
        !-- >Sho<w backgroun>d 0< --
      /ListOption>
      Li<stOption id="1"
        !->- S<how backgro>u<nd 1 ... etc --
      >/ListOption
    /ListConfiguration
    
  2. Opcję konfiguracji można też użyć w bardziej złożonych wyrażeniach:

    <Condition>
      <Expressions>
          <Expression name="background_zero_and_something_>else"<;
            !-- Use bg_img as part of a more complex eva>luation -<-
            ![CDATA[[CONFIGURATION.bg_im&&g] == &>quot;0&<quot;  ... >]]
      <    />Expression
     <   /Expressions
        Compare expression="background>_zero_and<_something_else"
      >     < !-- Con>t<ent goes h>ere --
        /Compare
    /Condition
    

Kompozycje kolorów

Format tarczy zegarka umożliwia definiowanie motywów kolorystycznych za pomocą ColorConfiguration. Użytkownicy mogą wybrać dowolny motyw w edytorze tarczy zegarka, a kolory z tego motywu mogą się pojawiać w definicji tarczy zegarka.

Aby na przykład zdefiniować motyw z 2 elementami i 3 kolorami:

Rozluźnione

Urban

Zdefiniuj ColorConfiguration w ten sposób:

<UserConfigurations>
  <ColorConfiguration id="myThemeColor" displayName="theme_label&qu>ot; d<efaultValue="0"
    ColorOption id="0" displayName="rela>xed_l<abel" colors="#3083dc #f8ffe5 #7dde92" /
    ColorOption id=&quo>t;1<" displayName=>&<quot;urban_label&qu>ot; colors="#f4b393 #fc60a8 #7a28cb" /
  /ColorConfiguration
/UserConfigurations

Można ich potem używać jako źródeł danych zamiast szesnastkowych wartości kolorów. Zwróć uwagę, jak jest określona wartość indeksu, która służy do wyboru pierwszego, drugiego lub trzeciego elementu motywu:

<HourHand resource="hour" ... tintColor="[CONFIGURATION.myT>h<emeColor.0]" /
MinuteHand resource="minute" ... tintColor=&quo>t<;[CONFIGURATION.myThemeColor.1]" /
SecondHand resource="second">; ... tintColor="[CONFIGURATION.myThemeColor.2]" /

W szczególnym przypadku, gdy każdy element ColorOption ma zdefiniowany tylko jeden kolor, można też odwoływać się do niego jako CONFIGURATION.myThemeColor bez indeksu. Użytkownik może następnie wybrać dowolny motyw w edytorze watchface.

Smaki

Uwaga: wersje motywów są obsługiwane w wersji 2 i wyższych formatu tarczy zegarka.

UserConfigurations zapewniają użytkownikowi dużą elastyczność, ale wraz ze wzrostem liczby zdefiniowanych elementów konfiguracji liczba kombinacji może gwałtownie wzrosnąć.

Flavors umożliwia definiowanie wstępnie ustawionych wartości dla UserConfigurations, które warto wyróżnić.

Użytkownik może wybrać jeden z dostępnych wstępnie ustawień w aplikacji towarzyszącej lub wybrać każdą wartość konfiguracji osobno.

Weźmy na przykład tarczę zegarka, w której zdefiniowano 3 ustawienia (dla przejrzystości pominięto elementy wewnętrzne i szczegóły atrybutów):

<UserConfigurations>
  <ColorConfiguration id="themeColor>"<; ...
    ColorOption id="0" displayName=>"<;bright_label" ... /
    ColorOption id="1&qu>ot;< displayName=">mon<ochrome_label" ... /
  /ColorConfigura>tion
<  ListConfiguration id="clockAppearance" ... 
>    L<istOption id="0" displayName="big_an>d_b<old_label" ..>. /<
    ListOption id="1" displ>a<yName="minimal>_label" ... /
  /ListConfiguration
  BooleanConfiguration id="showHr" ... /
/UserConfigurations

Zdefiniowane masz:

  1. Konfiguracja motywu kolorystycznego, która umożliwia użytkownikowi wybranie motywu do zastosowania. Zdefiniowano 2 motywy: kolorowy i monochromatyczny.
  2. Lista opcji wyglądu zegara. Masz do wyboru 2 opcje: duży, wyrazisty zegar oraz minimalistyczny zegar.
  3. Wybór, czy na tarczy zegarka ma być widoczne tętno użytkownika.

Ponadto na tarczy zegarka masz ComplicationSlot.

Zdecyduj, że chcesz wyróżnić 2 elementy Flavors dla użytkownika. Istnieje wiele możliwych kombinacji tych ustawień, ale te są naszym zdaniem najlepsze:

  1. Sportowy:
    1. Motyw kolorystyczny o jasnych kolorach, który dodaje energii i pobudza do działania (ID: 0)
    2. Duża i wyraźna tarcza zegara, aby można było ją zobaczyć podczas ćwiczeń (ID: 0)
    3. Tętno wyświetlane na tarczy zegarka w celu ułatwienia orientacji
    4. Miejsce na widżet wyświetlające liczbę kroków
  2. Wyrafinowany smak::
    1. monochromatyczny motyw kolorystyczny, który pasuje do każdego stroju (identyfikator: 1);
    2. Minimalna tarcza zegara, która pasuje do każdego środowiska (ID: 1)
    3. Brak tętna na tarczy zegarka
    4. Ignorowanie widżetu

Smak musi być włączony w sekcji watch_face_info.xml:

<?xml version="1.0" encodin>g<="utf-8&>quot;?
WatchF<aceInfo
    ...
    MultipleInstancesAl>lowed< value="true" /
    F>l<avorsSupported> value="true" /
/WatchFaceInfo

Następnie w sekcji UserConfigurations definiujesz każdą wersję:

<Flavors defaultValue="sportyFl>avo<r"
  Flavor id="spo>rtyFl<avor" ... 
    Configuration id=">theme<Color" optionId="0"/
    Configur>ation< id="clockAppearance" optionId=&>quot;<0"/
    Configuration >id=&quo<t;showHr" optionId="TRUE"/
    ComplicationSlot slotId="0"
      DefaultProviderPolicy
            >  def<aultSystemProvide>r=&<quot;ST>EP_<COUNT"
              defaultSys>temPr<oviderType="SHORT_TEXT"/
    /Com>plica<tionSlot
  /Flavor
  Flavor id="sophisticat>edFla<vor" ... 
    Configuration id="t>hemeC<olor" optionId="1>"/<
    Configuration id="clockAppearance" optionId="1"/
    Configuration id="showHr"> option<Id="FALSE"/
    ComplicationSlot slotId="0"
      !--
        Type here is set to empty to demonstrate >how t<o hide a complica>tio<n
     > <  slot i>n Flavors.
      --
      DefaultProviderPolicy
              defaultSystemProvider="SUNRISE_SUNSET"
              defaultSystemProviderType="EMPTY"/
    /ComplicationSlot
  /Flavor
/Flavors