Thiết lập Định dạng mặt đồng hồ

Lưu ý: Trang này cho bạn thấy một bước trong quy trình quản lý cấu hình mặt đồng hồ theo cách thủ công. Nếu bạn muốn thiết kế mặt đồng hồ bằng một công cụ theo kiểu WYSIWYG (những gì bạn thấy là những gì bạn nhận được), hãy xem hướng dẫn về Watch Face Studio trước.

Hướng dẫn này bao gồm các bước sử dụng công cụ cần thiết để định cấu hình mặt đồng hồ bằng Định dạng mặt đồng hồ, một số đề xuất về cấu trúc dự án và hướng dẫn từng bước để áp dụng các công cụ nhằm tạo ra cấu trúc đó.

Bắt đầu dùng Android Studio

Cách dễ nhất để bắt đầu phát triển mặt đồng hồ theo cách thủ công là sử dụng Android Studio. Tính năng hỗ trợ mặt đồng hồ có trong kênh thử nghiệm.

  1. Nhấp vào File > New Project (Tệp > Dự án mới)
  2. Trong phần Wear OS, hãy chọn Mặt đồng hồ cơ bản

Thao tác này sẽ tạo cấu trúc cần thiết cho một mặt đồng hồ hoạt động đầy đủ.

Cấu trúc dự án

Khi bạn tạo mặt đồng hồ tuỳ chỉnh sử dụng Định dạng mặt đồng hồ, Android App Bundle chứa tệp mặt đồng hồ tuỳ chỉnh phải hoàn toàn tách biệt với Android App Bundle chứa logic của ứng dụng Wear OS. Một số cửa hàng ứng dụng (bao gồm cả Google Play) ngăn bạn tải Android App Bundle lên, trong đó có logic Wear OS và mặt đồng hồ tuỳ chỉnh.

Khai báo phiên bản Định dạng mặt đồng hồ

Trong tệp kê khai của ứng dụng mới (AndroidManifest.xml), hãy kiểm tra thuộc tính ứng dụng cho biết bạn sử dụng Định dạng mặt đồng hồ.

Một số tính năng của Định dạng mặt đồng hồ chỉ có trong các phiên bản sau này. Đặt thuộc tính này thành giá trị thấp nhất hỗ trợ các tính năng bạn cần để tối đa hoá khả năng tương thích của thiết bị, đồng thời đặt minSdkVersion cho phù hợp. Tìm hiểu thêm về cách định cấu hình các phiên bản của ứng dụng.

<manifest ...>
    <!--
        Use SDK version 33 to support Watch Face Format (WFF) version 1 and
        higher, SDK version 34 to support WFF version 2 and higher, and so on.
    -->
    <uses-sdk
        android:minSdkVersion="34"
        android:targetSdkVersion="34" />

    <!--
        WFF is a resource-only format, so the hasCode attribute should be set to
        false to reflect this.
    -->
    <application
        android:label="@string/watch_face_name"
        android:hasCode="false"
        ...>
        <meta-data android:name="com.google.android.wearable.standalone"
            android:value="true" />
        <property
            android:name="com.google.wear.watchface.format.version"
            android:value="2" />
    </application>
</manifest>

Khai báo siêu dữ liệu mặt đồng hồ

Trong thư mục tài nguyên res/xml của ứng dụng, có một tệp tên là watch_face_info.xml. Đây là nơi bạn xác định siêu dữ liệu của mặt đồng hồ:

<?xml version="1.0" encoding="utf-8"?>
<WatchFaceInfo>

    <Preview value="@drawable/watch_face_preview" />
    <Category value="CATEGORY_EMPTY" />
    <AvailableInRetail value="true" />
    <MultipleInstancesAllowed value="true" />
    <Editable value="true" />
</WatchFaceInfo>

Các trường trong tệp này đại diện cho các thông tin sau:

Preview
Đề cập đến đối tượng có thể vẽ chứa hình ảnh xem trước của mặt đồng hồ.
Category

Xác định danh mục của mặt đồng hồ. Phải là chuỗi hoặc tham chiếu đến chuỗi, chẳng hạn như @string/ref_name. Mỗi nhà sản xuất thiết bị có thể xác định một tập hợp danh mục mặt đồng hồ riêng.

Giá trị mặc định: empty_category_meta để nhóm mặt đồng hồ này với các mặt đồng hồ thuộc "danh mục trống" khác ở cuối chế độ xem bộ chọn mặt đồng hồ.

AvailableInRetail

Liệu mặt đồng hồ có dùng được ở chế độ giới thiệu bán lẻ của thiết bị hay không. Phải là giá trị boolean hoặc tham chiếu đến giá trị boolean, chẳng hạn như @bool/watch_face_available_in_retail.

Giá trị mặc định: false

MultipleInstancesAllowed

Liệu mặt đồng hồ có thể có nhiều mục yêu thích hay không. Phải là giá trị boolean hoặc tham chiếu đến giá trị boolean như @bool/watch_face_multiple_instances_allowed.

Giá trị mặc định: false

Editable

Liệu mặt đồng hồ có chỉnh sửa được hay không, tức là mặt đồng hồ có một chế độ cài đặt hoặc ít nhất là một chức năng không cố định. Nút này dùng để hiện hoặc ẩn nút Edit (Chỉnh sửa) cho mặt đồng hồ trong danh sách yêu thích.

Giá trị mặc định: false

Khai báo tên mặt đồng hồ

Trong tệp kê khai của ứng dụng (AndroidManifest.xml), hãy đặt thuộc tính android:label thành tên của mặt đồng hồ:

<application android:label="@string/watch_face_name" >

Khai báo thông tin chi tiết về mặt đồng hồ

Cấu trúc của một tài liệu cơ bản về mặt đồng hồ WFF như sau:

<WatchFace width="450" height="450">
  <Scene>
    <!-- Content to be rendered -->
  </Scene>
</WatchFace>

Mẫu Android Studio cung cấp một tài liệu cơ bản trong res/raw/watchface.xml. Để hỗ trợ nhiều hình dạng và kích thước màn hình, hãy khai báo hỗ trợ cho nhiều hình dạng và kích thước.

Phần tử gốc luôn là WatchFace. heightwidth xác định phạm vi của không gian toạ độ để sử dụng trong mặt đồng hồ, đồng thời mặt đồng hồ được điều chỉnh tỷ lệ cho phù hợp với thiết bị mà mặt đồng hồ đang được dùng; heightwidth không biểu thị số lượng pixel thực tế.

Định dạng mặt đồng hồ sắp xếp một số thông tin chi tiết về mặt đồng hồ:

  • Siêu dữ liệu, chẳng hạn như thời gian và số bước xuất hiện trong hình ảnh xem trước của mặt đồng hồ.
  • Cấu hình người dùng, chẳng hạn như các chủ đề màu sắc khác nhau cho mặt đồng hồ, các phần tử mà người dùng có thể bật/tắt và lựa chọn giữa một số phần tử. Định dạng mặt đồng hồ phiên bản 2 giới thiệu các biến thể. Các biến thể này có thể xuất hiện trong cấu hình người dùng. Mỗi phiên bản chỉ định một cấu hình người dùng đặt sẵn, chỉ định loại và kiểu của các phần tử xuất hiện cùng với thời gian trên mặt đồng hồ. Các chế độ cài đặt sẵn này giúp bạn dễ dàng tạo các nhóm phần tử bắt mắt. Trong ứng dụng đồng hành Wear OS, người dùng sẽ thấy các phiên bản khác nhau của mặt đồng hồ trong một hàng có thể cuộn.
  • Một cảnh chứa các phần tử trực quan của mặt đồng hồ. Các phần tử xuất hiện gần cuối cảnh sẽ xuất hiện ở trên các phần tử khác, vì vậy, thứ tự thông thường sẽ như sau:
    • Kim của đồng hồ kim hoặc văn bản của đồng hồ số
    • Mặt đồng hồ hiển thị thông tin bổ sung, chẳng hạn như thứ trong tuần hoặc số bước của người dùng
    • Các đồ hoạ khác giúp tăng tính thẩm mỹ hoặc trang trí cho mặt đồng hồ, chẳng hạn như hình ảnh về một khu cắm trại
  • Nhóm các phần tử, cho phép bạn sửa đổi nhiều phần tử cùng một lúc. Bạn có thể tạo các biến thể của những nhóm này trong một cảnh, cho phép bạn chọn ẩn hoặc sửa đổi nội dung khi hệ thống chuyển sang chế độ môi trường xung quanh tiết kiệm pin.

Nhờ các thuộc tính được định kiểu rõ ràng và có nguyên tắc về tần suất cũng như giá trị hợp lệ nên bạn tránh được hầu hết các nguồn lỗi khi tạo mặt đồng hồ.

Khai báo tính năng hỗ trợ hình dạng mặt đồng hồ (không bắt buộc)

Bạn chỉ cần thực hiện bước này nếu muốn hỗ trợ các hành vi khác nhau cho nhiều kích thước mặt đồng hồ. Bạn có thể bỏ qua bước này nếu muốn mặt đồng hồ của mình điều chỉnh theo kích thước của đồng hồ.

Trong thư mục tài nguyên res/xml của ứng dụng, hãy khai báo tập hợp các hình dạng mặt đồng hồ mà bạn hỗ trợ trong watch_face_shapes.xml:

<WatchFaces>
    <WatchFace shape="CIRCLE" width="300" height="300"
               file="@raw/watchface"/>
    <WatchFace shape="CIRCLE" width="450" height="450"
               file="@raw/watchface_large_circle"/>
<WatchFaces>

Sau đó, hãy xác định giao diện và hành vi của mặt đồng hồ cho từng hình dạng mặt đồng hồ. Nếu không xác định tệp hình dạng, thì bạn chỉ cần một tệp, watchface.xml.

Sử dụng ví dụ trong phần này, các tệp XML thô sẽ là:

  • res/raw/watchface.xml
  • res/raw/watchface_large_circle.xml

Xác định nhà xuất bản mặt đồng hồ (không bắt buộc)

Trong tệp kê khai của ứng dụng, bạn có thể khai báo (không bắt buộc) một chuỗi tuỳ ý dùng để xác định nhà xuất bản của mặt đồng hồ, hoặc tên và phiên bản công cụ mà bạn đang sử dụng:

<application ...>
    ...
    <property
        android:name="com.google.wear.watchface.format.publisher"
        android:value="<var>{toolName}-{toolVersion}</var>" />
</application>

Kiểm tra độ chính xác và hiệu suất của mặt đồng hồ

Trong quá trình phát triển và trước khi tải lên Google Play, hãy kiểm tra để đảm bảo mặt đồng hồ của bạn không có lỗi cú pháp bằng cách sử dụng tính năng xác thực Định dạng mặt đồng hồ tích hợp trong Android Studio. Tính năng này tự động làm nổi bật các lỗi trong mã của bạn và nhận biết được phiên bản.

Bạn cũng nên kiểm tra để đảm bảo mặt đồng hồ đáp ứng các yêu cầu về mức sử dụng bộ nhớ bằng cách chạy công cụ mức sử dụng bộ nhớ.

Tạo gói ứng dụng cho mặt đồng hồ

Cách dễ nhất để tạo và triển khai mặt đồng hồ là thông qua Android Studio. Android Studio có hỗ trợ sẵn cho các cấu hình chạy mặt đồng hồ. Sau khi bạn nhấp vào nút Run (Chạy), Android Studio sẽ triển khai mặt đồng hồ đến thiết bị hoặc trình mô phỏng và đặt mặt đồng hồ đó làm mặt đồng hồ đang hoạt động.

Mặt đồng hồ mẫu

Bạn có thể xem thêm các mẫu dự án Định dạng mặt đồng hồ trên GitHub.