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 de 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:
Figura 1. Layout de preferência da interface do usuário do carro.
Tipos de preferência disponíveis
Esta seção descreve os tipos de preferência da interface do usuário do carro.
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 de 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 CarUi equivalente à classe androidx.preference.Preference
que oferece suporte aos seguintes atributos, 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 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 desenhável 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 CarUi equivalente à 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
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 deve conter um elemento do tipo android.widget.RadioButton
, com id R.id.radio_button
e também deve conter outros elementos e ids requeridos pela classe base.
CarUiSwitchPreference
Este é o CarUi equivalente à classe androidx.preference.SwitchPreference
. A diferença é que quando este elemento não está habilitado, uma mensagem toast é mostrada. A mensagem do sistema pode ser personalizada chamando o método setMessageToShowWhenDisabledPreferenceClicked
no Android 10 e no 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 customizar 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
.
CarUiDialogFragment
Esta 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 criar uma subclasse dessa classe para apresentar qualquer plataforma temática AlertDialog
.
CarUiEditTextPreference
Este é o CarUi equivalente à 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 CarUi equivalente à classe androidx.preference.PreferenceDialogFragments
. Os clientes devem usar 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.
CarUiListPreference
CarUi equivalente à classe androidx.preference.ListPreference
.
ListPreferenceFragment
Um fragmento que fornece um layout com androidx.preference.ListPreference
nele.
CarUiMultiSelectListPreference
O CarUi equivalente à classe androidx.preference.Preference
.
MultiSelectListPreferenceFragment
Um fragmento que fornece um layout com com.android.car.ui.CarUiMultiSelectListPreference
nele.