Xác định cấu hình người dùng

UserConfigurations cho phép bạn tạo các tuỳ chọn mà người dùng có thể chọn. Bạn có thể điều chỉnh giao diện của các thành phần trên mặt đồng hồ dựa trên các giá trị đã chọn.

Các tuỳ chọn cấu hình người dùng có thể là:

  • BooleanConfiguration: thường được dùng cho trường hợp người dùng có thể chọn hiển thị hoặc không hiển thị một phần tử hoặc chọn giữa hai kiểu
  • ListConfiguration: cung cấp cho người dùng một loạt các tuỳ chọn. Ví dụ: nếu mặt đồng hồ có 4 hình nền khác nhau để chọn
  • ColorConfiguration: xác định giao diện màu, từ đó người dùng có thể chọn giao diện mà họ muốn.

Tuỳ chọn boolean

Tuỳ chọn Boolean có lẽ là đơn giản nhất trong các cấu hình người dùng. Bạn có thể định nghĩa các thuộc tính này như sau:

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

Sau đó, bạn có thể sử dụng các tuỳ chọn Boolean theo hai cách:

  1. Sử dụng cấu trúc BooleanConfiguration trong mặt đồng hồ 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>
    

    Xin lưu ý rằng bạn không thể lồng các tuỳ chọn cấu hình trong quá trình sử dụng, vì vậy, nội dung sau không hợp lệ:

    <!-- 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. Ngoài ra, bạn có thể sử dụng tuỳ chọn cấu hình trong biểu thức:

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

Tùy chọn danh sách

Tuỳ chọn danh sách hoạt động theo cách rất giống với tuỳ chọn boolean. Ví dụ: để cung cấp danh sách hình nền cho người dùng chọn:

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

Tương tự như các tuỳ chọn boolean, bạn cũng có hai cách để sử dụng tuỳ chọn này:

  1. Sử dụng phần tử ListConfiguration trong Scene:

    <ListConfiguration id="bg_img">
      <ListOption id="0">
        <!-- Show background 0 -->
      </ListOption>
      <ListOption id="1">
        <!-- Show background 1 ... etc -->
      </ListOption>
    </ListConfiguration>
    
  2. Ngoài ra, bạn có thể sử dụng tuỳ chọn cấu hình trong các biểu thức phức tạp hơn:

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

Cách phối Màu

Định dạng mặt đồng hồ cho phép bạn xác định giao diện màu thông qua ColorConfiguration. Người dùng có thể chọn giao diện họ muốn trong trình chỉnh sửa mặt đồng hồ và màu sắc trong giao diện này có thể xuất hiện trong toàn bộ định nghĩa mặt đồng hồ.

Ví dụ: để xác định một giao diện có hai mục nhập và ba màu trong giao diện:

Dễ chịu

Thành thị

Xác định ColorConfiguration như sau:

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

Sau đó, bạn có thể sử dụng các giá trị này làm nguồn dữ liệu thay vì giá trị màu hệ thập lục phân. Lưu ý cách chỉ định giá trị chỉ mục để chọn phần tử đầu tiên, thứ hai hoặc thứ ba của giao diện:

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

Trong trường hợp cụ thể mà mỗi ColorOption chỉ có một màu được xác định, bạn cũng có thể tham chiếu màu đó dưới dạng CONFIGURATION.myThemeColor mà không cần chỉ mục.

CHÈN VĂN BẢN THAY THẾ VÀO ĐÂY CHÈN VĂN BẢN THAY THẾ VÀO ĐÂY

Sau đó, người dùng có thể chọn mục nhập giao diện mà họ muốn trong trình chỉnh sửa mặt đồng hồ.

Hương vị

Lưu ý: Các phiên bản được hỗ trợ trên phiên bản 2 trở lên của Định dạng mặt đồng hồ.

UserConfigurations mang đến cho người dùng nhiều sự linh hoạt, nhưng khi bạn tăng số lượng phần tử cấu hình mà bạn xác định, số lượng tổ hợp có thể tăng lên đáng kể.

Flavors cho phép bạn xác định các giá trị đặt trước cho UserConfigurations mà bạn nghĩ là đáng làm nổi bật.

Sau đó, người dùng có thể chọn trong số các phiên bản đặt trước này trong ứng dụng đồng hành hoặc tiếp tục chọn từng giá trị cấu hình riêng lẻ.

Ví dụ: hãy xem xét một mặt đồng hồ mà bạn xác định 3 chế độ cài đặt (đã bỏ qua các phần tử bên trong và thông tin chi tiết về thuộc tính để rõ ràng):

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

Bạn đã xác định:

  1. Cấu hình giao diện màu, cho phép người dùng chọn giao diện màu cần áp dụng. Bạn đã xác định hai giao diện, một giao diện đầy màu sắc và một giao diện đơn sắc.
  2. Danh sách các lựa chọn về giao diện đồng hồ. Bạn đã xác định hai lựa chọn, một đồng hồ lớn đậm và một đồng hồ trông tối giản hơn.
  3. Lựa chọn hiển thị nhịp tim của người dùng trên mặt đồng hồ hay không.

Ngoài ra, bạn có một ComplicationSlot trên mặt đồng hồ.

Bạn quyết định có hai Flavors mà bạn muốn làm nổi bật cho người dùng. Có nhiều tổ hợp khác có thể áp dụng cho tất cả các chế độ cài đặt này, nhưng đây là những tổ hợp mà bạn cho là hiệu quả nhất:

  1. Phiên bản thể thao: Phiên bản này sẽ bao gồm:
    1. Giao diện màu sáng, giúp bạn tràn đầy năng lượng và hoạt động tích cực (Mã: 0)
    2. Đồng hồ lớn và đậm để có thể nhìn thấy trong khi tập thể dục (Mã: 0)
    3. Nhịp tim hiển thị trên mặt đồng hồ để tham khảo
    4. Khu vực hiển thị chức năng cho biết số bước
  2. Một phiên bản tinh vi: Phiên bản này sẽ bao gồm:
    1. Chủ đề màu đơn sắc, phù hợp với mọi bộ trang phục (Mã: 1)
    2. Đồng hồ tối giản, phù hợp với mọi môi trường (Mã: 1)
    3. Không có nhịp tim hiển thị trên mặt đồng hồ
    4. Chưa bật vùng chức năng

Bạn cần bật phiên bản trong watch_face_info.xml:

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

Sau đó, mỗi Phiên bản được xác định trong UserConfigurations như sau:

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