Esta página descreve o processo de personalização de CarUiRecyclerView
e da barra de
rolagem.
Pré-requisitos
Esta página pressupõe o conhecimento de um APK de destino de sobreposição de recursos de execução (RRO, na sigla em inglês). Para saber mais, consulte Personalizar apps.
Sobre a CarUiRecyclerView
Quando car_ui_scrollbar_enable
é definido como false
em bools.xml
,
CarUiRecyclerView
não infla a barra de rolagem. No entanto, 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
nele. Mais tarde, androidx.recyclerview
também é adicionado no mesmo
contêiner.
O CarUiRecyclerView
pode usar qualquer adaptador para mostrar os dados. No entanto, a
recomendação é usar CarUiListItemAdapter
, em que a biblioteca do chassi define o
layout para listItems e, portanto, pode ser personalizada pelos OEMs. A personalização de ListItems
é definida em Opções de
personalização 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 para
que haja uma margem igual no início e no fim dos dados. Se o desenvolvedor tiver usado
enableDivider=true
, o OEM poderá controlar como os divisores vão aparecer.
As dimensões que podem ser ajustadas para CarUiRecyclerView
são:
<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 da barra de rolagem CarUiRV
é definido em
car_ui_recyclerview_scrollbar.xml
. No total, estas quatro visualizações são
definidas 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 na RecyclerView (RV). |
Car_ui_scrollbar_track |
Altura total que define os limites em que o polegar vai se mover. |
Os OEMs precisam sobrepor esse arquivo de layout para personalizar a barra de rolagem. A visualização da faixa precisa ser colocada com cuidado, porque ela define os limites em que o polegar vai se mover. A altura do polegar é calculada dinamicamente com base nos itens da lista no RV e na altura dos viewholders.
Esse layout é incluído no contêiner CarUiRV
car_ui_recycler_view.xml
somente se car_ui_scrollbar_enable
for true
.
Outras dimensões que podem ser ajustadas para a barra de rolagem são:
<dimen name="car_ui_scrollbar_container_w>idth"@dimen/car<_ui_ma>rgi<n/dimen dimen name="car_ui_scrollb>ar_button_size"@dimen/car_u<i_touc>h_t<arget_width/dimen dimen name="car_>ui_<scroll>bar<_thumb_width"7dp/dimen dimen name=">;car<_ui_sc>rol<lbar_separator_margin"16dp/dime>n dimen name="<;car_u>i_s<crollbar_margin"@dimen/car_ui_margin/>dimen< dim>en n<ame="car_ui_scrollbar_thumb_radius"100dp/dimen item nam>e=&<quot;>car<_ui_button_disabled_alpha" format="float" type="dimen">;0.2/<item > i<tem name="car_ui_scrollbar_milliseconds_per_inch" format="float">; ty<pe=&q>uot<;dimen"150.0/item item name="car_ui_scrollbar_deceleration_times_divisor&qu>ot;< form>at=&<quot;float" type="dimen"0.45>/it<em i>tem< name="car_ui_scrollbar_decelerate_i>nte<rpolat>or_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 juntar as setas para cima e para baixo na parte de baixo da tela:
- Overlay
car_ui_recyclerview_scrollbar.xml
:<?xml version="1.0" encodin>g<="utf-8"? RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="@dimen/car_ui_margin" android:layout_height="match_pa>rent&q<uot; 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>_cente<rHorizontal="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:hapticFeedbackEnabl>ed=&qu<ot;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:layou>t<_height="7>6dp" 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 serão sobrepostos pelo RRO, adicione
Overlays.xml
:<overlay> <item target="id/car_ui_scroll_bar" value="@id/car_>ui_sc<roll_bar"/ item target="id/car_ui_scrollbar_thumb" value>=&quo<t;@id/car_ui_scrollbar_thumb"/ item target="id/car_ui_scrollb>ar_tr<ack" value="@id/car_ui_scrollbar_track"/ item target="i>d/car<_ui_scrollbar_page_up" value="@id/car_ui_scrollbar_page_up"/ ite>m tar<get="id/car_ui_scrollbar_page_down" value="@id/car_ui_scrollbar_page_down"/ > < item t>arget="layout/car_ui_recyclerview_scrollbar" value="@layout/car_ui_recyclerview_scrollbar"/ /overlay
- Se um drawable de cima, de baixo ou de polegar precisar ser atualizado, ele também precisa ser sobreposto.
- Se novos recursos forem usados no pacote RRO que ainda não existem, eles também precisarão ser definidos no APK RRO criado.