Personalizzare CarUiRecyclerView

Questa pagina descrive la procedura per personalizzareCarUiRecyclerView e la barra di scorrimento.

Prerequisiti

Questa pagina presuppone la conoscenza di un APK target con overlay delle risorse di runtime (RRO). Per scoprire di più, consulta Personalizzare le app.

Informazioni su CarUiRecyclerView

Quando car_ui_scrollbar_enable è impostato su false in bools.xml, CarUiRecyclerView non espande la barra di scorrimento. Detto questo, solo il androidx.recyclerview viene visualizzato con gli stili personalizzabili come definito di seguito. Quando car_ui_scrollbar_enable è impostato su true, CarUiRecyclerView espande il contenitore con la barra di scorrimento installata al suo interno. Successivamente, androidx.recyclerview viene aggiunto anche nello stesso contenutore.

CarUiRecyclerView può utilizzare qualsiasi adattatore per visualizzare i dati. Tuttavia, il consiglio è di utilizzare CarUiListItemAdapter se la libreria del telaio definisce il layout per listItems e può quindi essere personalizzata dagli OEM. La personalizzazione per gli elementi ListItem è definita in Opzioni di personalizzazione per CarUiListItem.

Per impostazione predefinita, car_ui_scrollbar_margin viene utilizzato come larghezza della visualizzazione della barra di scorrimento. Questo margine viene aggiunto anche come android:endMargin di CarUiRecyclerView in modo che il margine sia uguale all'inizio e alla fine dei dati. Se lo sviluppatore avesse utilizzato enableDivider=true, l'OEM può controllare la visualizzazione dei separatori. Le dimensioni che possono essere regolate per CarUiRecyclerView sono:

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

Barra di scorrimento

Il file di layout per la barra di scorrimento CarUiRV è definito in car_ui_recyclerview_scrollbar.xml. In totale, all'interno della visualizzazione sono definiti quattro tipi di visualizzazioni:

Visualizzazioni
Car_ui_scrollbar_page_up Definisce il pulsante di scorrimento verso l'alto.
Car_ui_scrollbar_page_down definisce il pulsante Giù della barra di scorrimento.
Car_ui_scrollbar_thumb L'altezza viene calcolata in modo dinamico in base al numero di voci dell'elenco nella visualizzazione elenco (RV).
Car_ui_scrollbar_track Altezza totale che definisce i limiti entro cui si muoverà il cursore.

Gli OEM devono sovrapporre questo file di layout per personalizzare la barra di scorrimento. La visualizzazione della traccia deve essere posizionata con attenzione in quanto definisce i limiti entro cui si muoverà il cursore. L'altezza delle miniature viene calcolata dinamicamente in base agli elementi dell'elenco nella visualizzazione elenco e all'altezza delle visualizzazioni.

Questo layout è incluso nel contenitore CarUiRV car_ui_recycler_view.xml solo se car_ui_scrollbar_enable è true.

Altre dimensioni che possono essere regolate per la barra di scorrimento sono:

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

Esempio

Ad esempio, per unire le frecce Su e Giù nella parte inferiore dello schermo:

  1. Overlay 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>
  2. Per definire le risorse da sovrapporre all'RRO, aggiungi 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>
  3. Se è necessario aggiornare un elemento grafico Up, Down o Thumb, devono essere sovrapposti.
  4. Se nel pacchetto RRO vengono utilizzate nuove risorse che non esistono già, queste risorse devono essere definite anche nell'APK RRO che crei.