自定義 CarUiRecyclerView

本頁介紹了自訂CarUiRecyclerView和捲軸的過程。

先決條件

此頁面假定了解執行時間資源覆蓋 (RRO) 目標 APK。要了解更多信息,請參閱自訂應用程式

關於 CarUiRecyclerView

bools.xmlcar_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用作滾動條視圖的寬度。此邊距也作為 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高度根據回收器視圖 (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. 如果必須更新向上、向下或拇指繪圖,它們也應該被覆蓋。
  4. 如果 RRO 套件中使用了尚不存在的任何新資源,則也應在您建立的 RRO APK 中定義這些資源。