CarUiRecyclerView'i özelleştirme

Bu sayfada,CarUiRecyclerView ve kaydırma çubuğunu özelleştirme işlemi açıklanmaktadır.

Ön koşullar

Bu sayfada, çalışma zamanında kaynak yer paylaşımı (RRO) hedef APK'sı hakkında bilgi sahibi olduğunuz varsayılmaktadır. Daha fazla bilgi edinmek için Uygulamaları özelleştirme başlıklı makaleyi inceleyin.

CarUiRecyclerView hakkında

bools.xml içinde 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ığı şekilde özelleştirilebilir stillerle doldurulur. car_ui_scrollbar_enable true olarak ayarlandığında CarUiRecyclerView, kapsayıcıyı içine kaydırma çubuğu yerleştirilmiş şekilde şişirir. Daha sonra androidx.recyclerview de aynı kapsayıcıya eklenir.

CarUiRecyclerView, verileri görüntülemek için herhangi bir adaptör alabilir. Ancak öneri, şasi kitaplığının listItems için düzeni tanımladığı ve dolayısıyla OEM'ler tarafından özelleştirilebildiği CarUiListItemAdapter kullanmaya yöneliktir. ListItems için özelleştirme, CarUiListItem için özelleştirme seçenekleri bölümünde tanımlanır.

Varsayılan olarak, kaydırma çubuğu görünümünün genişliği için car_ui_scrollbar_margin kullanılır. Bu kenar boşluğu, verilerin başlangıcında ve sonunda eşit kenar boşluğu olması için CarUiRecyclerView'in android:endMargin olarak da eklenir. Geliştirici enableDivider=true kullanıyorsa OEM, bölücülerin nasıl görüneceğini kontrol edebilir. CarUiRecyclerView için ayarlanabilen boyutlar:

  <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ğu için düzen dosyası car_ui_recyclerview_scrollbar.xml içinde tanımlanır. Görüntüleme içinde toplam dört görünüm tanımlanır:

Görüntüleme sayısı
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üşüm Görünümü'ndeki (RV) liste öğelerinin sayısına göre dinamik olarak hesaplanır.
Car_ui_scrollbar_track Başparmak kaydırma çubuğunun hareket edeceği sınırları tanımlayan toplam yükseklik.

OEM'ler, kaydırma çubuğunu özelleştirmek için bu düzen dosyasını yerleştirmelidir. Başparmak kaydırma çubuğunun hareket edeceği sınırları tanımladığı için parça görünümü dikkatlice yerleştirilmelidir. Küçük resim yüksekliği, RV'deki liste öğelerine ve görüntüleyen kullanıcıların yüksekliğine göre dinamik olarak hesaplanır.

Bu düzen, car_ui_scrollbar_enable true ise yalnızca CarUiRV kapsayıcısınacar_ui_recycler_view.xml dahil edilir.

Kaydırma çubuğu için ayarlanabilen 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, hem yukarı hem de aşağı oku ekranın alt kısmına 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 yer paylaşımı yapılacak 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 çizilebilir öğelerinin güncellenmesi gerekiyorsa bunlar da yer paylaşımına dahil edilmelidir.
  4. RRO paketinde daha önce mevcut olmayan yeni kaynaklar kullanılıyorsa bu kaynaklar, oluşturduğunuz RRO APK'sında da tanımlanmalıdır.