Personalize as preferências da interface do carro

Esta página descreve como usar e personalizar elementos no pacote com.android.car.ui.preference , que inclui elementos de UI 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 do 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 UI do carro.

Tipos de preferência disponíveis

Esta seção descreve os tipos de preferência da UI do carro.

PreferênciaFragmento

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>

CarUiPreferência

Este é o equivalente CarUi da classe androidx.preference.Preference que oferece suporte aos atributos a seguir, que podem ser personalizados usando uma sobreposição de recursos de tempo de execução (RRO). Todos os outros elementos CarUi que usam uma variante do estilo CarUiPreference também suportam os atributos a seguir.

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

A seguir está 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 precisarão garantir que o novo layout forneça pelo menos os IDs esperados pelas classes androidx correspondentes. Isto também se aplica aos outros elementos que utilizam este 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>

CarUiRadioButtonPreferência

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

CarUiSwitchPreferência

Este é o equivalente CarUi da classe androidx.preference.SwitchPreference . A diferença é que quando este elemento não está habilitado, uma mensagem brinde é mostrada. A mensagem do sistema pode ser personalizada chamando o método setMessageToShowWhenDisabledPreferenceClicked no Android 10 e Android 11. Este 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 permite 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>

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

CarUiDialogFragmento

Esta classe é emprestada de androidx.preference.PreferenceDialogFragmentCompat com algumas adições específicas para CarUi. Os clientes devem utilizar 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 precisarão 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 utilizar esta 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.

CarUiListPreferência

CarUi equivalente à 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.