Personalizando as preferências de IU do carro

Este artigo descreve como usar e personalizar elementos no pacote com.android.car.ui.preference , que inclui elementos de interface do usuário que podem ser usados ​​para apresentar preferências para aplicativos.

A maioria dos elementos são subclasses de classes com.androidx.preference às quais você adiciona personalizações CarUi. Na maioria dos casos, você pode usar os elementos no pacote com.android.car.ui.preferences usando com.android.car.PreferenceFragment . PreferenceFragment substitui todos os elementos androidx.preference por seus equivalentes em car.ui.preferences . Para ver essas funcionalidades em ação, consulte o aplicativo de referência car-ui-lib Paintbooth. Por exemplo:

Layout de preferência da IU do carro

Figura 1. Layout de preferência da interface do usuário do carro.

Tipos de preferência disponíveis

PreferenceFragment

PreferenceFragment é uma subclasse de androidx.preference.PreferenceFragmentCompat e é a classe base que os clientes devem usar. Durante uma chamada para setPreferenceScreen , essa classe substitui automaticamente os elementos de androidx.preference pelo equivalente disponível dos elementos 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

Este é o equivalente CarUi da classe androidx.preference.Preference que suporta os atributos a seguir, que podem ser personalizados usando um Runtime Resource Overlay (RRO). Todos os outros elementos CarUi que usam uma variante do estilo CarUiPreference também suportam os seguintes atributos.

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

Veja a seguir o estilo base para com.android.car.ui.preference , que estende o tema androidx.Preference . O drawable chevron é definido em 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>

A ripple é definida em 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>

Se o layout no estilo acima estiver sendo sobreposto, os clientes precisam garantir que o novo layout forneça pelo menos os ids esperados pelas classes androidx correspondentes. Isso também se aplica aos outros elementos que usam esse estilo base.

CarUiDropDownPreference

Este é o equivalente CarUi da classe androidx.preference.DropDownPreference e usa o seguinte estilo:

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

CarUiRadioButtonPreference

Essa subclasse de androidx.preference.TwoStatePreference infla o layout car_ui_radio_button_preference_widget durante a inicialização. Se este layout está sendo sobreposto em um RRO, o novo layout deve conter um elemento do tipo android.widget.RadioButton , com id R.id.radio_button e também deve conter outros elementos e ids exigidos pela classe base.

CarUiSwitchPreference

Este é o equivalente CarUi da classe androidx.preference.SwitchPreference . A diferença é que quando este elemento não está habilitado, uma mensagem de brinde é mostrada. A mensagem do sistema pode ser personalizada chamando o método setMessageToShowWhenDisabledPreferenceClicked no Android 10 e Android 11. Esse elemento usa o seguinte estilo:

<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

Uma subclasse de CarUiPreference que habilita uma ação secundária. Os atributos que podem ser usados ​​para personalizar este elemento são fornecidos abaixo:

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

Esse elemento usa o mesmo estilo da classe base e requer R.id.action_widget_container e android.R.id.widget_frame .

CarUiDialogFragment

Essa classe é emprestada de androidx.preference.PreferenceDialogFragmentCompat com algumas adições específicas para CarUi. Os clientes devem usar subclasses desta classe para apresentar a plataforma temática AlertDialog .

PreferenceDialogFragment

Uma subclasse direta de CarUiDialogFragment . Os clientes devem subclassificar esta classe para apresentar qualquer plataforma temática AlertDialog .

CarUiEditTextPreference

Este é o equivalente CarUi da classe androidx.preference.EditTextPreference :

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

Se o layout no estilo acima estiver sendo sobreposto, os clientes precisam garantir que o novo layout forneça os IDs esperados pela classe androidx.preference.EditTextPreference .

EditTextPreferenceDialogFragment

Uma subclasse direta de PreferenceDialogFragment . Além disso, o equivalente CarUi da classe androidx.preference.PreferenceDialogFragments . Os clientes devem usar essa classe para apresentar qualquer plataforma temática AlertDialog .

CarUiSeekBarDialogPreference

Uma implementação da classe androidx.preference.DialogPreference , que fornece a funcionalidade 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

Um fragmento que fornece um layout com um SeekBar em uma caixa de diálogo.

CarUiListPreference

CarUi equivalente da classe androidx.preference.ListPreference .

ListPreferenceFragment

Um fragmento que fornece um layout com androidx.preference.ListPreference nele.

CarUiMultiSelectListPreference

O equivalente CarUi da classe androidx.preference.Preference .

MultiSelectListPreferenceFragment

Um fragmento que fornece um layout com com.android.car.ui.CarUiMultiSelectListPreference nele.