Настройка параметров пользовательского интерфейса автомобиля

В этой статье описывается, как использовать и настраивать элементы в пакете com.android.car.ui.preference , который включает элементы пользовательского интерфейса, которые можно использовать для представления предпочтений для приложений.

Большинство элементов являются подклассами классов com.androidx.preference , к которым вы добавляете настройки CarUi. В большинстве случаев вы можете использовать элементы пакета com.android.car.ui.preferences с помощью com.android.car.PreferenceFragment . PreferenceFragment заменяет все элементы androidx.preference их эквивалентами в car.ui.preferences . Чтобы увидеть эти функции в действии, см. справочное приложение car-ui-lib Paintbooth. Например:

Макет предпочтения пользовательского интерфейса автомобиля

Рис. 1. Схема настроек пользовательского интерфейса автомобиля.

Доступные типы предпочтений

PreferenceFragment

PreferenceFragment является подклассом androidx.preference.PreferenceFragmentCompat и является базовым классом, который должны использовать клиенты. Во время вызова setPreferenceScreen этот класс автоматически заменяет элементы из androidx.preference доступными эквивалентами из элементов car.ui.preference .

<style name="PreferenceFragment.CarUi">
        <item name="android:divider">?android:attr/listDivider</item>
        <item name="android:layout">@layout/car_ui_preference_fragment_with_toolbar</item>
</style>

CarUiPreference

Это эквивалент androidx.preference.Preference класса androidx.preference.Preference, который поддерживает следующие атрибуты, которые можно настроить с помощью наложения ресурсов времени выполнения (RRO). Все остальные элементы CarUi, в которых используется вариант стиля CarUiPreference , также поддерживают следующие атрибуты.

<declare-styleable name="CarUiPreference">
      <!-- Toggle for showing chevron -->
      <attr name="showChevron" format="boolean" />
      <!-- Show ripple when disabled preference is clicked -->
      <attr name="showRippleOnDisabledPreference" format="boolean" />
</declare-styleable>

Ниже приведен базовый стиль для com.android.car.ui.preference , который расширяет тему androidx.Preference . Рисуемый chevron определен в car_ui_preference_icon_chevron.xml .

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false" android:drawable="@drawable/car_ui_preference_icon_chevron_disabled"/>
  <item android:state_enabled="true" android:drawable="@drawable/car_ui_preference_icon_chevron_enabled"/>
</selector>

ripple определяется в car_ui_recyclerview_button_ripple_background .

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/car_ui_ripple_color" />
<style name="Preference.CarUi">
        <item name="allowDividerBelow">false</item>
        <item name="allowDividerAbove">false</item>
        <item name="android:layout">@layout/car_ui_preference</item>
</style>

Если макет в приведенном выше стиле накладывается, клиенты должны убедиться, что новый макет по крайней мере предоставляет идентификаторы, ожидаемые соответствующими классами androidx . Это также относится к другим элементам, которые используют этот базовый стиль.

CarUiDropDownPreference

Это CarUi-эквивалент класса androidx.preference.DropDownPreference , использующий следующий стиль:

<style name="Preference.CarUi.DropDown">
        <item name="android:layout">@layout/car_ui_preference_dropdown</item>
</style>

АвтомобильUiRadioButtonPreference

Этот подкласс androidx.preference.TwoStatePreference увеличивает макет car_ui_radio_button_preference_widget во время инициализации. Если этот макет накладывается в RRO, новый макет должен содержать элемент типа android.widget.RadioButton с идентификатором R.id.radio_button , а также другие элементы и идентификаторы, требуемые базовым классом.

CarUiSwitchPreference

Это эквивалент androidx.preference.SwitchPreference класса androidx.preference.SwitchPreference. Разница в том, что когда этот элемент не включен, отображается всплывающее сообщение. Всплывающее сообщение можно настроить, вызвав метод setMessageToShowWhenDisabledPreferenceClicked в Android 10 и Android 11. Этот элемент использует следующий стиль:

<style name="Preference.CarUi.SwitchPreference">
        <item name="android:widgetLayout">@layout/car_ui_preference_widget_switch</item>
        <item name="android:switchTextOn">@string/car_ui_preference_switch_on</item>
        <item name="android:switchTextOff">@string/car_ui_preference_switch_off</item>
</style>

CarUiTwoActionPreference

Подкласс CarUiPreference , который включает дополнительное действие. Атрибуты, которые можно использовать для настройки этого элемента, приведены ниже:

<declare-styleable name="CarUiTwoActionPreference">
        <!-- Determines if the secondary action is initially shown -->
        <attr name="actionShown" format="boolean"/>
</declare-styleable>

Этот элемент использует тот же стиль, что и базовый класс, и требует R.id.action_widget_container и android.R.id.widget_frame .

АвтомобильUiDialogФрагмент

Этот класс заимствован как есть из androidx.preference.PreferenceDialogFragmentCompat с некоторыми дополнениями, характерными для CarUi. Клиенты должны использовать подклассы этого класса для представления тематической платформы AlertDialog .

PreferenceDialogFragment

Прямой подкласс CarUiDialogFragment . Клиенты должны подклассировать этот класс для представления любой тематической платформы AlertDialog .

CarUiEditTextPreference

Это эквивалент androidx.preference.EditTextPreference класса androidx.preference.EditTextPreference:

<style name="Preference.CarUi.DialogPreference.EditTextPreference">
        <item name="android:dialogLayout">@layout/car_ui_preference_dialog_edittext</item>
</style>

Если макет в приведенном выше стиле накладывается, клиенты должны убедиться, что новый макет предоставляет идентификаторы, ожидаемые классом androidx.preference.EditTextPreference .

EditTextPreferenceDialogFragment

Прямой подкласс PreferenceDialogFragment . Кроме того, CarUi эквивалент класса androidx.preference.PreferenceDialogFragments . Клиенты должны использовать этот класс для представления любой тематической платформы AlertDialog .

CarUiSeekBarDialogPreference

Реализация класса androidx.preference.DialogPreference , который обеспечивает функциональность SeekBar :

<style name="Preference.CarUi.SeekBarPreference">
        <item name="android:layout">@layout/car_ui_preference_widget_seekbar</item>
        <item name="adjustable">true</item>
        <item name="showSeekBarValue">false</item>
</style>

SeekBarPreferenceDialogFragment

Фрагмент, предоставляющий макет с SeekBar в диалоговом окне.

CarUiListPreference

CarUi эквивалент класса androidx.preference.ListPreference .

ListPreferenceFragment

Фрагмент, предоставляющий макет с androidx.preference.ListPreference .

CarUiMultiSelectListPreference

Эквивалент androidx.preference.Preference класса androidx.preference.Preference.

MultiSelectListPreferenceFragment

Фрагмент, предоставляющий макет с com.android.car.ui.CarUiMultiSelectListPreference .