CarUiRecyclerView را سفارشی کنید

این صفحه روند سفارشی سازی CarUiRecyclerView و نوار اسکرول را شرح می دهد.

پیش نیازها

این صفحه دانش یک APK هدف همپوشانی منبع زمان اجرا (RRO) را فرض می کند. برای کسب اطلاعات بیشتر، به سفارشی کردن برنامه‌ها مراجعه کنید.

درباره CarUiRecyclerView

وقتی car_ui_scrollbar_enable در bools.xml روی false تنظیم شده است، CarUiRecyclerView نوار پیمایش را باد نمی کند. همانطور که گفته شد، فقط androidx.recyclerview با سبک های قابل تنظیم مطابق زیر پر شده است. وقتی car_ui_scrollbar_enable روی true تنظیم شود، CarUiRecyclerView ظرف را با نوار اسکرول نصب شده در آن باد می کند. بعداً androidx.recyclerview نیز در همان ظرف اضافه شده است.

CarUiRecyclerView می تواند هر آداپتوری را برای نمایش داده ها استفاده کند. اما توصیه این است که از CarUiListItemAdapter استفاده کنید، جایی که شاسی lib طرح‌بندی 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 و ارتفاع بیننده ها محاسبه می شود.

فقط در صورتی که 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>

مثال

به عنوان مثال، برای آوردن هر دو فلش بالا و پایین در پایین صفحه:

  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 که ایجاد می کنید نیز تعریف شوند.