Cette page décrit le processus de personnalisation de CarUiRecyclerView
et de la barre de défilement.
Prérequis
Cette page suppose que vous connaissez un APK cible de superposition de ressources d'exécution (RRO). Pour en savoir plus, consultez Personnaliser les applications.
À propos de CarUiRecyclerView
Lorsque car_ui_scrollbar_enable
est défini sur false
dans bools.xml
, CarUiRecyclerView
n'inflate pas la barre de défilement. Toutefois, seul androidx.recyclerview
est gonflé avec des styles personnalisables, comme défini ci-dessous.
Lorsque car_ui_scrollbar_enable
est défini sur true
, CarUiRecyclerView
gonfle le conteneur avec la barre de défilement installée. Plus tard, androidx.recyclerview
est également ajouté dans le même conteneur.
CarUiRecyclerView
peut utiliser n'importe quel adaptateur pour afficher les données. Toutefois, nous vous recommandons d'utiliser CarUiListItemAdapter
, où la bibliothèque du châssis définit la mise en page des éléments de liste et peut donc être personnalisée par les OEM. La personnalisation des ListItems est définie dans les options de personnalisation pour CarUiListItem.
Par défaut, car_ui_scrollbar_margin
est utilisé comme largeur de la vue de la barre de défilement.
Cette marge est également ajoutée en tant que android:endMargin
du CarUiRecyclerView afin qu'il y ait une marge égale au début et à la fin des données. Si le développeur a utilisé enableDivider=true
, l'OEM peut contrôler l'affichage des séparateurs.
Les dimensions pouvant être ajustées pour CarUiRecyclerView
sont les suivantes:
<dimen name="car_ui_recyclerview_divider_height">0dp</dimen> <dimen name="car_ui_recyclerview_divider_start_margin">0dp</dimen> <dimen name="car_ui_recyclerview_divider_end_margin">0dp</dimen> <dimen name="car_ui_recyclerview_divider_top_margin">0dp</dimen> <dimen name="car_ui_recyclerview_divider_bottom_margin">0dp</dimen>
Barre de défilement
Le fichier de mise en page de la barre de défilement CarUiRV
est défini dans car_ui_recyclerview_scrollbar.xml
. Au total, quatre vues sont définies dans la vue:
Vues | |
---|---|
Car_ui_scrollbar_page_up |
Définit le bouton "Haut" de la barre de défilement. |
Car_ui_scrollbar_page_down |
définit le bouton de défilement vers le bas. |
Car_ui_scrollbar_thumb |
La hauteur est calculée de manière dynamique en fonction du nombre d'éléments de liste dans la Recycler View (RV). |
Car_ui_scrollbar_track |
Hauteur totale qui définit les limites dans lesquelles le curseur se déplacera. |
Les OEM doivent superposer ce fichier de mise en page pour personnaliser la barre de défilement. La vue de la piste doit être placée avec soin, car elle définira les limites dans lesquelles le curseur se déplacera. La hauteur du curseur est calculée de manière dynamique en fonction des éléments de liste dans la RV et de la hauteur des conteneurs de vue.
Cette mise en page est incluse dans le conteneur CarUiRV
car_ui_recycler_view.xml
uniquement si car_ui_scrollbar_enable
est true
.
Vous pouvez également ajuster les dimensions suivantes pour la barre de défilement:
<dimen name="car_ui_scrollbar_container_width">@dimen/car_ui_margin</dimen> <dimen name="car_ui_scrollbar_button_size">@dimen/car_ui_touch_target_width</dimen> <dimen name="car_ui_scrollbar_thumb_width">7dp</dimen> <dimen name="car_ui_scrollbar_separator_margin">16dp</dimen> <dimen name="car_ui_scrollbar_margin">@dimen/car_ui_margin</dimen> <dimen name="car_ui_scrollbar_thumb_radius">100dp</dimen> <item name="car_ui_button_disabled_alpha" format="float" type="dimen">0.2</item> <item name="car_ui_scrollbar_milliseconds_per_inch" format="float" type="dimen">150.0</item> <item name="car_ui_scrollbar_deceleration_times_divisor" format="float" type="dimen">0.45</item> <item name="car_ui_scrollbar_decelerate_interpolator_factor" format="float" type="dimen">1.8</item> <dimen name="car_ui_scrollbar_padding_start">0dp</dimen> <dimen name="car_ui_scrollbar_padding_end">0dp</dimen>
Exemple
Par exemple, pour regrouper les flèches vers le haut et vers le bas en bas de l'écran:
- Superposition
car_ui_recyclerview_scrollbar.xml
:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/car_ui_margin" android:layout_height="match_parent" android:id="@+id/car_ui_scroll_bar"> <!-- View height is dynamically calculated during layout. --> <View android:id="@+id/car_ui_scrollbar_thumb" android:layout_width="7dp" android:layout_height="20dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:background="@drawable/car_ui_recyclerview_scrollbar_thumb"/> <View android:id="@+id/car_ui_scrollbar_track" android:layout_width="10dp" android:layout_height="match_parent" android:layout_marginTop="10dp" android:layout_centerHorizontal="true" android:layout_above="@+id/car_ui_scrollbar_page_up"/> <ImageView android:id="@+id/car_ui_scrollbar_page_up" android:layout_width="76dp" android:layout_height="76dp" android:focusable="false" android:hapticFeedbackEnabled="false" android:src="@drawable/car_ui_recyclerview_ic_up" android:scaleType="centerInside" android:layout_centerHorizontal="true" android:layout_above="@+id/car_ui_scrollbar_page_down"/> <ImageView android:id="@+id/car_ui_scrollbar_page_down" android:layout_width="76dp" android:layout_height="76dp" android:focusable="false" android:hapticFeedbackEnabled="false" android:src="@drawable/car_ui_recyclerview_ic_down" android:scaleType="centerInside" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true"/> </RelativeLayout>
- Pour définir les ressources à superposer à la RRO, ajoutez
Overlays.xml
:<overlay> <item target="id/car_ui_scroll_bar" value="@id/car_ui_scroll_bar"/> <item target="id/car_ui_scrollbar_thumb" value="@id/car_ui_scrollbar_thumb"/> <item target="id/car_ui_scrollbar_track" value="@id/car_ui_scrollbar_track"/> <item target="id/car_ui_scrollbar_page_up" value="@id/car_ui_scrollbar_page_up"/> <item target="id/car_ui_scrollbar_page_down" value="@id/car_ui_scrollbar_page_down"/> <item target="layout/car_ui_recyclerview_scrollbar" value="@layout/car_ui_recyclerview_scrollbar"/> </overlay>
- Si un drawable "Haut", "Bas" ou "Boutons de défilement" doit être mis à jour, il doit également être superposé.
- Si de nouvelles ressources qui n'existent pas encore sont utilisées dans le package RRO, elles doivent également être définies dans l'APK RRO que vous créez.