CarUiRecyclerView'ı özelleştirin

Bu sayfada CarUiRecyclerView ve kaydırma çubuğunu özelleştirme süreci açıklanmaktadır.

Önkoşullar

Bu sayfa, çalışma zamanı kaynak yerleşimi (RRO) hedef APK'sı hakkında bilgi sahibi olunduğunu varsayar. Daha fazla bilgi edinmek için Uygulamaları özelleştirme konusuna bakın.

CarUiRecyclerView Hakkında

bools.xml dosyasında car_ui_scrollbar_enable false olarak ayarlandığında, CarUiRecyclerView kaydırma çubuğunu şişirmez. Bununla birlikte, yalnızca androidx.recyclerview aşağıda tanımlandığı gibi özelleştirilebilir stillerle şişirilmiştir. car_ui_scrollbar_enable true olarak ayarlandığında, CarUiRecyclerView içinde kaydırma çubuğu takılı olan kabı şişirir. Daha sonra androidx.recyclerview de aynı kapsayıcıya eklenir.

CarUiRecyclerView verileri görüntülemek için herhangi bir adaptörü kullanabilir. Ancak öneri, şasi kütüphanesinin listItems düzenini tanımladığı ve dolayısıyla OEM'ler tarafından özelleştirilebildiği CarUiListItemAdapter kullanılmasıdır. ListItems'e yönelik özelleştirme, CarUiListItem'e yönelik özelleştirme seçeneklerinde tanımlanır.

Varsayılan olarak, kaydırma çubuğu görünümünün genişliği olarak car_ui_scrollbar_margin kullanılır. Bu kenar boşluğu aynı zamanda CarUiRecyclerView'a android:endMargin olarak eklenir, böylece verinin başında ve sonunda eşit kenar boşluğu olur. Geliştirici enableDivider=true kullanmışsa OEM, bölücülerin nasıl görünmesi gerektiğini kontrol edebilir. CarUiRecyclerView için ayarlanabilecek boyutlar şunlardır:

  <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>

Kaydırma çubuğu

CarUiRV kaydırma çubuğunun düzen dosyası car_ui_recyclerview_scrollbar.xml dosyasında tanımlanmıştır. Toplamda bu dört görünüm görünüm içinde tanımlanır:

Görüntüleme
Car_ui_scrollbar_page_up Kaydırma çubuğunun yukarı düğmesini tanımlar.
Car_ui_scrollbar_page_down kaydırma çubuğunun aşağı düğmesini tanımlar.
Car_ui_scrollbar_thumb Yükseklik, Geri Dönüşümcü Görünümü'ndeki (RV) liste öğelerinin sayısına bağlı olarak dinamik olarak hesaplanır.
Car_ui_scrollbar_track Başparmağın hareket edeceği sınırları tanımlayan toplam yükseklik.

OEM'lerin kaydırma çubuğunu özelleştirmek için bu düzen dosyasını kaplaması gerekir. Parça görünümü, başparmağın hareket edeceği sınırları tanımlayacak şekilde dikkatlice yerleştirilmelidir. Başparmak yüksekliği, RV'deki liste öğelerine ve görüntü tutucuların yüksekliğine göre dinamik olarak hesaplanır.

Bu düzen CarUiRV konteynerine car_ui_recycler_view.xml yalnızca car_ui_scrollbar_enable true ise dahil edilir.

Kaydırma çubuğu için ayarlanabilecek diğer boyutlar şunlardır:

  <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>

Örnek

Örneğin, ekranın alt kısmında Yukarı ve Aşağı okunu bir araya getirmek için:

  1. Yer paylaşımı 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 tarafından kaplanacak kaynakları tanımlamak için Overlays.xml ekleyin:
    <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. Yukarı, Aşağı veya başparmak çiziminin güncellenmesi gerekiyorsa bunların da üst üste bindirilmesi gerekir.
  4. RRO paketinde halihazırda mevcut olmayan yeni kaynaklar kullanılıyorsa bu kaynakların oluşturduğunuz RRO APK'sında da tanımlanması gerekir.