تعریف پیکربندی‌های کاربر

‫UserConfigurations به شما امکان می‌دهد گزینه‌هایی ایجاد کنید که کاربر بتواند از بین آن‌ها انتخاب کند. می‌توانید ظاهر عناصر صفحه ساعت را براساس مقادیر انتخابی تنظیم کنید.

گزینه‌های پیکربندی کاربر می‌تواند این‌ها باشد:

  • BooleanConfiguration: معمولاً برای مواردی استفاده می‌شود که کاربر ممکن است گزینه نمایش یا عدم نمایش عنصر را داشته باشد، یا بین دو سبک انتخاب کند
  • ‫ListConfiguration: طیف وسیعی از گزینه‌ها را دراختیار کاربر قرار می‌دهد. برای مثال، اگر صفحه ساعت چهار تصویر پس‌زمینه مختلف برای انتخاب داشته باشد
  • ColorConfiguration: مضامین رنگ را تعریف می‌کند که کاربر می‌تواند از بین آن‌ها مضمون ترجیحی‌اش را انتخاب کند.

گزینه‌های بولی

گزینه‌های بولی شاید ساده‌ترین پیکربندی‌های کاربر باشند. می‌توان آن‌ها را به‌صورت زیر تعریف کرد:

<!-- Under WatchFace element -->
<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>

سپس می‌توان از گزینه‌های بولی به دو روش استفاده کرد:

  1. استفاده از ساختار BooleanConfiguration در صفحه ساعت Scene:

    <!-- Within the main Scene of the watch face -->
    <BooleanConfiguration id="show_date">
        <BooleanOption id="TRUE">
            <!-- ...Content when date required -->
        </BooleanOption>
        <BooleanOption id="FALSE">
            <!-- ...Content when date not required -->
        </BooleanOption>
    </BooleanConfiguration>

    توجه داشته باشید که گزینه‌های پیکربندی را نمی‌توان در استفاده از آن‌ها تودرتو کرد.

  2. یا می‌توانید از گزینه پیکربندی در عبارت‌ها استفاده کنید:

        <Expressions>
            <Expression name="my_expression">
                <!-- Use show_date as part of a more complex evaluation -->
                <![CDATA[[CONFIGURATION.show_date] == "TRUE" && [HOUR_0_23] < 15]]
            </Expression>
        </Expressions>
        <Compare expression="my_expression">
            <!-- Content goes here -->
        </Compare>
    </Condition>

گزینه‌های فهرست

گزینه‌های فهرست عملکردی بسیار مشابه با گزینه‌های بولی دارند. برای مثال، برای ارائه فهرستی از تصاویر پس‌زمینه برای انتخاب کاربر:

<!-- Under WatchFace element -->
<UserConfigurations>
    <ListConfiguration id="background_image" displayName="background_image_label"
        icon="background_option_icon"
        screenReaderText="background_image_label" defaultValue="0">
        <ListOption id="0" displayName="background0_image_label"
            screenReaderText="background0_image_label" icon="background0_icon" />
        <ListOption id="1" displayName="background1_image_label"
            screenReaderText="background1_image_label" icon="background1_icon" />
        ...
    </ListConfiguration>
</UserConfigurations>

مشابه با گزینه‌های بولی، دوباره دو روش برای استفاده از این وجود دارد:

  1. استفاده از عنصر ListConfiguration در Scene:

    <!-- Within the main Scene of the watch face -->
    <ListConfiguration id="background_image">
        <ListOption id="0">
            <!-- ...Content for option 0 -->
        </ListOption>
        <ListOption id="1">
            <!-- ...Content for option 1 -->
        </ListOption>
    </ListConfiguration>

  2. یا اینکه از گزینه پیکربندی می‌توان در عبارت‌های پیچیده‌تر استفاده کرد:

        <Expressions>
            <Expression name="background_zero_and_something_else">
                <!-- Use as part of a more complex evaluation -->
                <![CDATA[[CONFIGURATION.background_image] == "0" && [HOUR_0_23] < 15]]
            </Expression>
        </Expressions>
        <Compare expression="background_zero_and_something_else">
            <!-- Content goes here -->
        </Compare>
    </Condition>

مضمون‌های رنگ‌ها

«قالب صفحه ساعت» به شما امکان می‌دهد مضامین رنگ را ازطریق ColorConfiguration تعریف کنید. کاربران می‌توانند زمینه موردنظرشان را از ویرایشگر صفحه ساعت انتخاب کنند و رنگ‌های این زمینه در سراسر تعریف صفحه ساعتتان نشان داده شود.

برای مثال، برای تعریف زمینه با دو ورودی و سه رنگ در زمینه، ColorConfiguration را به‌صورت زیر تعریف کنید:

<!-- Under WatchFace element -->
<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>

سپس می‌توان از این نام‌ها به‌عنوان منبع داده به‌جای مقادیر رنگ شانزده‌شانزدهی استفاده کرد. توجه داشته باشید که مقدار شاخص چگونه برای انتخاب عنصر اول، دوم، یا سوم زمینه مشخص می‌شود:

<AnalogClock x="0" y="0" width="450" height="450">
    <HourHand resource="hour" x="220" y="55" width="20" height="190"
        pivotX="0.5" pivotY="0.9210"
        tintColor="[CONFIGURATION.myThemeColor.0]"/>
    <MinuteHand resource="minute" x="222" y="30" width="16" height="220"
        pivotX="0.5" pivotY="0.9"
        tintColor="[CONFIGURATION.myThemeColor.1]"/>
    <SecondHand resource="second" x="226" y="20" width="8" height="245"
        pivotX="0.5" pivotY="0.8571"
        tintColor="[CONFIGURATION.myThemeColor.2]"/>
</AnalogClock>

در حالت خاصی که هر ColorOption فقط یک رنگ تعریف‌شده داشته باشد، می‌توان آن را بدون شاخص نیز به‌عنوان CONFIGURATION.myThemeColor ارجاع داد. سپس کاربر می‌تواند ورودی زمینه موردنظرش را در ویرایشگر صفحه ساعت انتخاب کند.

طعم‌ها

توجه: از «طعم‌ها» در نسخه ۲ و بالاتر «قالب صفحه ساعت» پشتیبانی می‌شود.

UserConfigurations انعطاف‌پذیری زیادی به کاربر ارائه می‌دهد، اما با افزایش تعداد عناصر پیکربندی که تعریف می‌کنید، تعداد ترکیب‌ها می‌تواند به‌طور سرسام‌آوری افزایش یابد.

Flavors به شما امکان می‌دهد پیش‌تنظیماتی را برای UserConfigurations که فکر می‌کنید ارزش برجسته کردن دارند تعریف کنید.

سپس کاربر می‌تواند از بین این طعم‌های ازپیش‌تعیین‌شده در برنامه همپا انتخاب کند، یا به انتخاب هر مقدار پیکربندی به‌صورت جداگانه ادامه دهد.

برای مثال، صفحه ساعتی را درنظر بگیرید که در آن سه تنظیم را تعریف می‌کنید:

  1. پیکربندی مضمون رنگ‌ها که به کاربر امکان می‌دهد مضمون رنگ موردنظرش را برای اعمال شدن انتخاب کند. دو زمینه تعریف کرده‌اید، یکی رنگارنگ و دیگری تک‌رنگ.
  2. فهرستی از پس‌زمینه‌ها. دو انتخاب را که کاربر می‌تواند از بین آن‌ها انتخاب کند تعریف کرده‌اید.
  3. انتخاب اینکه ضربان قلب کاربر در صفحه ساعت نشان داده شود یا نه.

علاوه‌براین، ComplicationSlot را در صفحه ساعت دارید.

تصمیم می‌گیرید که دو Flavors وجود دارد که می‌خواهید به کاربر برجسته کنید. ترکیب‌های ممکن دیگری از همه این تنظیمات وجود دارد، اما این‌ها مواردی هستند که فکر می‌کنید بهترین عملکرد را دارند:

  1. طعم ورزشی: این طعم شامل موارد زیر خواهد بود:
    1. زمینه رنگ‌های روشن، برای انرژی دادن به شما و فعال کردن شما (شناسه: ۰)
    2. اولین تصویر پس‌زمینه (شناسه: ۰)
    3. نمایش ضربان قلب در صفحه ساعت برای مرجع
    4. جایگاه عملکرد اضافی که تعداد گام‌ها را نشان می‌دهد
  2. طعم پیچیده: این طعم شامل موارد زیر است:
    1. زمینه رنگی تک‌رنگ، برای هماهنگ شدن با هر لباسی (شناسه: ۱)
    2. تصویر پس‌زمینه دوم (شناسه: ۱)
    3. ضربان قلب در صفحه ساعت نشان داده نمی‌شود
    4. جایگاه عملکرد اضافی فعال نیست

طعم‌ها باید در watch_face_info.xml فعال شوند، بنابراین عنصر FlavorsSupported در فایل watch_face_info.xml باید با value="true" تنظیم شود.

هر «طعم» در UserConfigurations به این صورت تعریف می‌شود:

<!-- Under UserConfigurations -->
<Flavors defaultValue="sporty_flavor">
    <Flavor id="sporty_flavor"
        displayName="flavor_sporty_label" screenReaderText="flavor_sporty_label">
        <Configuration id="theme_color" optionId="0"/>
        <Configuration id="background_image" optionId="0"/>
        <Configuration id="show_hr" optionId="TRUE"/>
        <ComplicationSlot slotId="0">
            <DefaultProviderPolicy
                defaultSystemProvider="STEP_COUNT"
                defaultSystemProviderType="SHORT_TEXT"/>
        </ComplicationSlot>
    </Flavor>
    <Flavor id="sophisticated_flavor"
        displayName="flavor_sophisticated_label" screenReaderText="flavor_sophisticated_label">
        <Configuration id="theme_color" optionId="1"/>
        <Configuration id="background_image" optionId="1"/>
        <Configuration id="show_hr" 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>