В этой статье описывается процесс настройки CarUiRecyclerView
и полосы прокрутки.
Предпосылки
В этой статье предполагается, что вы знаете целевой APK-файл Runtime Resource Overlay (RRO). Чтобы узнать больше, см. раздел « Настройка приложений ».
О CarUiRecyclerView
Когда car_ui_scrollbar_enable
имеет значение false
в bools.xml
, CarUiRecyclerView
не будет увеличивать полосу прокрутки. Тем не менее, только androidx.recyclerview
настраиваемыми стилями, как определено ниже. Когда car_ui_scrollbar_enable
имеет значение true
, CarUiRecyclerView
будет раздувать контейнер с установленной в нем полосой прокрутки. Позднее androidx.recyclerview
также будет добавлен в тот же контейнер.
CarUiRecyclerView
может использовать любой адаптер для отображения данных. Но рекомендуется использовать CarUiListItemAdapter
где библиотека шасси определяет макет для listItems и, следовательно, может быть настроена OEM-производителями. Настройка для ListItems определяется в CarUiListItem .
По умолчанию car_ui_scrollbar_margin
используется как ширина полосы прокрутки. Это поле также добавляется как android:endMargin
в CarUiRecyclerView, поэтому поля в начале и в конце данных равны. Если разработчик использовал enableDivider=true
, OEM-производитель может контролировать, как должны отображаться разделители. Размеры, которые можно настроить для 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>
Полоса прокрутки
Файл макета для полосы прокрутки CarUiRV
определен в car_ui_recyclerview_scrollbar.xml
. Всего в представлении определены эти четыре представления:
Просмотры | |
---|---|
Car_ui_scrollbar_page_up | Определяет кнопку вверх полосы прокрутки. |
Car_ui_scrollbar_page_down | определяет кнопку вниз полосы прокрутки. |
Car_ui_scrollbar_thumb | Высота вычисляется динамически в зависимости от количества элементов списка в Recycler View (RV). |
Car_ui_scrollbar_track | Общая высота, определяющая границы, в которых будет перемещаться бегунок. |
OEM-производителям следует наложить этот файл макета, чтобы настроить полосу прокрутки. Вид дорожки следует размещать осторожно, так как это будет определять границы, в которых будет перемещаться бегунок. Высота большого пальца будет рассчитываться динамически на основе элементов списка в RV и высоты держателей просмотра.
Этот макет включается в контейнер CarUiRV
car_ui_recycler_view.xml
, только если car_ui_scrollbar_enable
имеет значение true
.
Другие размеры, которые можно настроить для полосы прокрутки:
<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>
Пример
Например, чтобы объединить стрелки вверх и вниз в нижней части экрана:
- Оверлей
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>
- Чтобы определить ресурсы, которые будут наложены RRO, добавьте
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>
- Если необходимо обновить элементы Up, Down или Thumb, они также должны быть перекрыты.
- Если в пакете RRO используются какие-либо новые ресурсы, которые еще не существуют, то эти ресурсы также должны быть определены в создаваемом вами APK RRO.