Na tej stronie opisujemy proces dostosowywaniaCarUiRecyclerView
i 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:
- 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>
- 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>
- Jeśli elementy do rysowania w górę, w dół lub kciukiem muszą zostać zaktualizowane, również należy je nałożyć.
- 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.