Personalizar 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 da interface que podem ser usadas para apresentar preferências por apps.

A maioria dos elementos é uma subclasse das classes com.androidx.preference às quais você adiciona Personalizações do CarUi. Na maioria dos casos, você pode usar os elementos na com.android.car.ui.preferences usando com.android.car.PreferenceFragment. PreferenceFragment substitui todos androidx.preference e seus equivalentes em car.ui.preferences Para conferir essas funcionalidades em ação, consulte o arquivo car-ui-lib App de referência do Paintbooth. Por exemplo:

Layout de preferência da interface do carro

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

Tipos de preferência disponíveis

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

PreferenceFragment

PreferenceFragment é uma subclasse de androidx.preference.PreferenceFragmentCompat e é a classe de base que que os clientes devem usar. Durante uma chamada para setPreferenceScreen, esta 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

Esse é o equivalente do CarUi da classe androidx.preference.Preference que oferece suporte aos seguintes atributos, que podem ser personalizados usando uma sobreposição de recursos no ambiente de execução (RRO). Todos os outros elementos CarUi que usam uma variante do estilo CarUiPreference também dão suporte aos 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>

Confira a seguir o estilo base de 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>

O ripple é definido 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 o novo layout fornece ao menos os IDs esperados pelos conjuntos androidx de turmas. Isso também se aplica aos outros elementos que usam esse estilo base.

CarUiDropDownPreference

Esse é o equivalente do CarUi do 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 de car_ui_radio_button_preference_widget durante inicialização do sistema. Se esse layout estiver sendo sobreposto em uma RRO, o novo layout precisará conter um elemento do tipo android.widget.RadioButton, com ID R.id.radio_button e também precisa conter outros elementos e IDs exigidos pela classe de base.

CarUiSwitchPreference

Esse é o equivalente no CarUi da classe androidx.preference.SwitchPreference. A diferença é que, quando esse elemento não é ativado, uma mensagem de aviso é exibida. O aviso pode ser personalizada chamando o Método setMessageToShowWhenDisabledPreferenceClicked em 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 ativa uma ação secundária. O de atributos que podem ser usados para personalizar esse 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

Esta turma é emprestada no estado em que se encontra no androidx.preference.PreferenceDialogFragmentCompat com algumas adições específicas do CarUi. Os clientes devem usar subclasses dessa classe para apresentar da plataforma com o tema AlertDialog.

PreferenceDialogFragment

Uma subclasse direta de CarUiDialogFragment . Os clientes devem criar uma subclasse para essa classe para apresentar qualquer plataforma temática AlertDialog.

CarUiEditTextPreference

Esse é o equivalente do CarUi do androidx.preference.EditTextPreference. classe:

<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 fornece os IDs esperados pela classe androidx.preference.EditTextPreference.

EditTextPreferenceDialogFragment

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

CarUiSeekBarDialogPreference

Uma implementação da classe androidx.preference.DialogPreference que fornece SeekBar (link em inglês). funcionalidade:

<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 uma SeekBar em uma caixa de diálogo.

CarUiListPreference

Equivalente do CarUi à classe androidx.preference.ListPreference.

ListPreferenceFragment

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

CarUiMultiSelectListPreference

O equivalente a CarUi da classe androidx.preference.Preference.

MultiSelectListPreferenceFragment

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