本文介紹自定義CarUiRecyclerView
和滾動條的過程。
先決條件
本文假定您了解運行時資源覆蓋 (RRO) 目標 APK。要了解更多信息,請參閱自定義應用程序。
關於 CarUiRecyclerView
當car_ui_scrollbar_enable
中的CarUiRecyclerView
設置為false
時, bools.xml
不會膨脹滾動條。也就是說,只有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 滾動條的佈局文件在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_enable
為true
時,此佈局才會包含在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>
例子
例如,要將向上和向下箭頭放在屏幕底部:
- 覆蓋
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 drawable,它們也應該被覆蓋。
- 如果在 RRO 包中使用了任何不存在的新資源,那麼這些資源也應該在您創建的 RRO APK 中定義。