Dostosuj CarUiRecyclerView

Na tej stronie opisujemy proces dostosowywaniaCarUiRecyclerViewi przewijania przeglądarki.

Wymagania wstępne

Ta strona zakłada, że zna docelowy plik APK nakładanych zasobów środowiska wykonawczego (RRO). Aby się uczyć Więcej informacji znajdziesz w artykule Dostosowywanie aplikacji.

Informacje o CarUiRecyclerView

Gdy ustawienie car_ui_scrollbar_enable ma wartość false w bools.xml, CarUiRecyclerView nie rozszerza paska przewijania. Jednak tylko Pole androidx.recyclerview zostało zawyżone przy użyciu stylów możliwych do dostosowania zgodnie z poniższą definicją. Gdy car_ui_scrollbar_enable ma wartość true, CarUiRecyclerView nadmuchuje kontener z zainstalowanym paskiem przewijania w dokumencie. Późniejszy użytkownik androidx.recyclerview został również dodany w tym samym kontenera.

Do wyświetlania danych CarUiRecyclerView może użyć dowolnego adaptera. Ale zalecamy używanie CarUiListItemAdapter, gdzie plik chassis lib definiuje dla elementów listItems, więc mogą być dostosowywane przez OEM. Dostosowanie elementu ListItems są zdefiniowane w sekcji Dostosowywanie CarUiListItem.

Domyślnie szerokość okna przewijania jest ustawiona na car_ui_scrollbar_margin. Ten margines jest również dodawany jako element android:endMargin parametru CarUiRecyclerView, jest taka sama marża na początku i na końcu danych. Jeśli deweloper używał enableDivider=true, producent OEM może określić, jak powinny wyglądać rozdzielniki. Wymiary, które można dostosować dla funkcji CarUiRecyclerView, to:

  <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 paska przewijania CarUiRV jest zdefiniowany w car_ui_recyclerview_scrollbar.xml Łącznie te 4 wyświetlenia to zdefiniowane w widoku:

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ół paska przewijania.
Car_ui_scrollbar_thumb Wysokość jest obliczana dynamicznie w zależności od liczby elementów w Widok kampera.
Car_ui_scrollbar_track Całkowita wysokość, która określa granice, po których porusza się kciuk.

OEM powinien nałożyć plik układu, aby dostosować pasek przewijania. Widok ścieżki powinien być umieszczony ostrożnie, wyznaczając granice, po których porusza się kciuk. Wysokość kciuka jest obliczana dynamicznie na podstawie listy elementów w kamperze oraz wysokości przez widzów.

Ten układ jest zawarty w kontenerze CarUiRV car_ui_recycler_view.xml tylko wtedy, gdy car_ui_scrollbar_enable jest true.

Inne wymiary paska przewijania to:

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

Przykład

Aby na przykład połączyć strzałki w górę i w dół u dołu ekranu:

  1. Nakładka 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. Aby określić zasoby, które mają być nakładane przez RRO, dodaj atrybut 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. Jeśli elementy do rysowania w górę, w dół lub kciukiem muszą zostać zaktualizowane, również należy je nałożyć.
  4. Jeśli w pakiecie RRO używane są nowe zasoby, które jeszcze nie istnieją, Te zasoby powinny być również zdefiniowane w tworzonym przez Ciebie pakiecie APK RRO.