Esta página descreve o processo de personalização do CarUiRecyclerView
e a rolagem
barra.
Pré-requisitos
Esta página pressupõe conhecimento de um APK de destino de sobreposição de recursos no momento da execução (RRO, na sigla em inglês). Para saber mais informações, consulte Personalizar apps.
Sobre o CarUiRecyclerView
Quando car_ui_scrollbar_enable
for definido como false
em bools.xml
,
CarUiRecyclerView
não infla a barra de rolagem. Dito isso, apenas o
androidx.recyclerview
é inflado com estilos personalizáveis, conforme definido abaixo.
Quando car_ui_scrollbar_enable
é definido como true
,
CarUiRecyclerView
infla o contêiner com a barra de rolagem instalada.
dentro dele. Depois, o androidx.recyclerview
também é adicionado no mesmo
contêiner do Docker.
O CarUiRecyclerView
pode usar qualquer adaptador para mostrar os dados. Mas o
é usar CarUiListItemAdapter
onde a biblioteca do chassi define os
layout para listItems e, portanto, pode ser personalizado por OEMs. A personalização de ListItems
são definidas em Personalização
opções para CarUiListItem.
Por padrão, car_ui_scrollbar_margin
é usado como a largura da visualização da barra de rolagem.
Essa margem também é adicionada como android:endMargin
do CarUiRecyclerView, portanto,
há margem igual no início e no final dos dados. Se o desenvolvedor tivesse usado
enableDivider=true
, o OEM poderá controlar como os divisores vão aparecer.
Estas são as dimensões que podem ser ajustadas para 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>
Barra de rolagem
O arquivo de layout para a barra de rolagem CarUiRV
é definido em
car_ui_recyclerview_scrollbar.xml
. No total, essas quatro visualizações são
definidos na visualização:
Visualizações | |
---|---|
Car_ui_scrollbar_page_up |
Define o botão para cima da barra de rolagem. |
Car_ui_scrollbar_page_down |
define o botão para baixo da barra de rolagem. |
Car_ui_scrollbar_thumb |
A altura é calculada dinamicamente, dependendo do número de itens da lista no Visualização de reciclagem (RV). |
Car_ui_scrollbar_track |
Altura total que define os limites em que o círculo será movido. |
Os OEMs precisam sobrepor esse arquivo de layout para personalizar a barra de rolagem. A exibição da faixa deve ser cuidadosamente, porque isso definiria os limites pelos quais o polegar se moverá. A altura do polegar é calculada dinamicamente com base nos itens da lista no RV e na altura dos fixadores de visualização.
Este layout está incluído no contêiner CarUiRV
car_ui_recycler_view.xml
apenas se car_ui_scrollbar_enable
é true
.
Outras dimensões que podem ser ajustadas para a barra de rolagem são:
<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>
Exemplo
Por exemplo, para unir as setas para cima e para baixo na parte de baixo da tela:
- Sobreposição
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>
- Para definir os recursos que vão ser sobrepostos pela RRO, adicione
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>
- Se um drawable para cima, para baixo ou de miniatura precisar ser atualizado, eles também devem ser sobrepostos.
- Se algum recurso novo for usado no pacote RRO que ainda não existe, então Esses recursos também precisam ser definidos no APK RRO criado.