Настроить CarUiRecyclerView

На этой странице описан процесс настройки CarUiRecyclerView и полосы прокрутки.

Предварительные условия

На этой странице предполагается знание целевого APK-файла наложения ресурсов среды выполнения (RRO). Дополнительные сведения см. в разделе Настройка приложений .

О CarUiRecyclerView

Если в bools.xml car_ui_scrollbar_enable установлено значение false , 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 (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>

Пример

Например, чтобы объединить стрелки вверх и вниз в нижней части экрана:

  1. Наложение 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. Чтобы определить ресурсы, которые будут перекрываться 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>
  3. Если необходимо обновить рисование «Вверх», «Вниз» или «Указательный палец», они также должны быть наложены друг на друга.
  4. Если в пакете RRO используются какие-либо новые ресурсы, которые еще не существуют, эти ресурсы также должны быть определены в создаваемом вами APK RRO.