CarUiRecyclerView 사용자 정의

이 페이지에서는 CarUiRecyclerView 및 스크롤 막대를 사용자 정의하는 프로세스를 설명합니다.

전제 조건

이 페이지에서는 런타임 리소스 오버레이(RRO) 대상 APK에 대한 지식이 있다고 가정합니다. 자세한 내용은 앱 사용자 정의를 참조하십시오.

CarUiRecyclerView 정보

bools.xml 에서 car_ui_scrollbar_enable false 로 설정하면 CarUiRecyclerView 스크롤 막대를 확장하지 않습니다. 즉, androidx.recyclerview 만 아래 정의된 맞춤설정 가능한 스타일로 확장됩니다. car_ui_scrollbar_enabletrue 로 설정되면 CarUiRecyclerView 스크롤 막대가 설치된 컨테이너를 확장합니다. 나중에 androidx.recyclerview 도 동일한 컨테이너 내에 추가됩니다.

CarUiRecyclerView 모든 어댑터를 사용하여 데이터를 표시할 수 있습니다. 그러나 섀시 lib가 listItems에 대한 레이아웃을 정의하므로 OEM이 사용자 정의할 수 있는 CarUiListItemAdapter 사용하는 것이 좋습니다. ListItems에 대한 사용자 정의는 CarUiListItem에 대한 사용자 정의 옵션 에 정의되어 있습니다.

기본적으로 car_ui_scrollbar_margin 스크롤바 뷰의 너비로 사용됩니다. 이 여백은 CarUiRecyclerView의 android:endMargin 으로도 추가되므로 데이터의 시작과 끝 부분에 동일한 여백이 있습니다. 개발자가 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의 목록 항목과 뷰홀더의 높이를 기반으로 동적으로 계산됩니다.

이 레이아웃은 car_ui_scrollbar_enabletrue 인 경우 에만 CarUiRV 컨테이너 car_ui_recycler_view.xml 에 포함됩니다.

스크롤 막대에 대해 조정할 수 있는 다른 크기는 다음과 같습니다.

  <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. Up, Down 또는 Thumb 드로어블을 업데이트해야 하는 경우 오버레이되어야 합니다.
  4. 아직 존재하지 않는 RRO 패키지에 새로운 리소스가 사용되는 경우 이러한 리소스는 생성한 RRO APK에도 정의되어야 합니다.