Dostosowywanie CarUiRecyclerView

Ta strona opisuje proces dostosowywania CarUiRecyclerView i paska przewijania.

Wymagania wstępne

Ta strona zakłada, że wiesz, czym jest docelowa wersja pliku APK z nakładką zasobów w czasie wykonywania (RRO). Więcej informacji znajdziesz w artykule Dostosowywanie aplikacji.

Informacje o CarUiRecyclerView

Gdy w elementach bools.xmlcar_ui_scrollbar_enable wartość car_ui_scrollbar_enable jest ustawiona na false, element CarUiRecyclerView nie powoduje rozszerzania paska przewijania. Jednak tylko element androidx.recyclerview jest wypełniany stylami, które można dostosować, jak opisano poniżej. Jeśli car_ui_scrollbar_enable ma wartość true, CarUiRecyclerView napełnia kontener za pomocą zainstalowanego w nim paska przewijania. Później w tym samym kontenerze dodaliśmy też androidx.recyclerview.

CarUiRecyclerView może wyświetlać dane z dowolnego adaptera. Zalecamy jednak użycie CarUiListItemAdapter, ponieważ biblioteka podwozia definiuje układ listy elementów, a OEM może go dostosować. Personalizacja elementów listy jest definiowana w opcjach personalizacji CarUiListItem.

Domyślnie car_ui_scrollbar_margin jest używane jako szerokość paska przewijania. Ta margines jest też dodawana jako android:endMargin CarUiRecyclerView, aby zapewnić równy margines na początku i na końcu danych. Jeśli deweloper użył elementu enableDivider=true, producent OEM może określić wygląd separatorów. Wymiary, które można dostosować do CarUiRecyclerView:

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

Pasek przewijania

Plik układu dla suwaka CarUiRV jest zdefiniowany w pliku car_ui_recyclerview_scrollbar.xml. W widoku zdefiniowano łącznie 4 widoki:

Wyświetlenia
Car_ui_scrollbar_page_up Określa przycisk w górę na pasku przewijania.
Car_ui_scrollbar_page_down definiuje przycisk w dół na pasku przewijania.
Car_ui_scrollbar_thumb Wysokość jest obliczana dynamicznie w zależności od liczby elementów listy w widoku recyclera (RV).
Car_ui_scrollbar_track Całkowita wysokość, która określa granice, w których będzie poruszać się suwak.

Producenci OEM powinni nałożyć ten plik układu, aby dostosować suwak. Widok ścieżki należy umieścić ostrożnie, ponieważ określa on granice, w których będzie poruszać się suwak. Wysokość miniatury jest obliczana dynamicznie na podstawie elementów listy w RV i wysokości elementów widoku.

Ten układ jest uwzględniany w kontenerze CarUiRVcar_ui_recycler_view.xml tylko, jeśli car_ui_scrollbar_enable ma wartość true.

Inne wymiary, które można dostosować do paska przewijania:

  <dimen name="car_ui_scrollbar_container_w>idth"@dimen/car<_ui_ma>rgi<n/dimen
  dimen name="car_ui_scrollb>ar_button_size"@dimen/car_u<i_touc>h_t<arget_width/dimen
  dimen name="car_>ui_<scroll>bar<_thumb_width"7dp/dimen
  dimen name=">;car<_ui_sc>rol<lbar_separator_margin"16dp/dime>n
  dimen name="<;car_u>i_s<crollbar_margin"@dimen/car_ui_margin/>dimen<
  dim>en n<ame="car_ui_scrollbar_thumb_radius"100dp/dimen

  item nam>e=&<quot;>car<_ui_button_disabled_alpha" format="float" type="dimen">;0.2/<item
>  i<tem name="car_ui_scrollbar_milliseconds_per_inch" format="float">; ty<pe=&q>uot<;dimen"150.0/item
  item name="car_ui_scrollbar_deceleration_times_divisor&qu>ot;< form>at=&<quot;float" type="dimen"0.45>/it<em
  i>tem< name="car_ui_scrollbar_decelerate_i>nte<rpolat>or_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

Przykład

Aby na przykład umieścić strzałki w górę i w dół u dołu ekranu:

  1. Nakładka car_ui_recyclerview_scrollbar.xml:
    <?xml version="1.0" encodin>g<="utf-8"?
    RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="@dimen/car_ui_margin"
        android:layout_height="match_pa>rent&q<uot;
        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>_cente<rHorizontal="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:hapticFeedbackEnabl>ed=&qu<ot;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:layou>t<_height="7>6dp"
            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. Aby określić zasoby, które mają być nakładane przez RRO, dodaj Overlays.xml:
    <overlay>
        <item target="id/car_ui_scroll_bar" value="@id/car_>ui_sc<roll_bar"/
        item target="id/car_ui_scrollbar_thumb" value>=&quo<t;@id/car_ui_scrollbar_thumb"/
        item target="id/car_ui_scrollb>ar_tr<ack" value="@id/car_ui_scrollbar_track"/
        item target="i>d/car<_ui_scrollbar_page_up" value="@id/car_ui_scrollbar_page_up"/
        ite>m tar<get="id/car_ui_scrollbar_page_down" value="@id/car_ui_scrollbar_page_down"/
     > <  item t>arget="layout/car_ui_recyclerview_scrollbar" value="@layout/car_ui_recyclerview_scrollbar"/
    /overlay
  3. Jeśli trzeba zaktualizować obrazek w górę, w dół lub obrazek z kciukiem, należy go też nałożyć.
  4. Jeśli w pakiecie RRO są używane nowe zasoby, które jeszcze nie istnieją, należy je zdefiniować w utworzonym pliku APK RRO.