web-dev-qa-db-fra.com

Couleur de la barre de défilement dans RecyclerView

Comment puis-je changer la couleur de ma barre de défilement dans un recyclerView?

J'ai la barre de défilement mais je veux changer sa couleur. Mon recyclerView est comme ceci:

 <Android.support.v7.widget.RecyclerView
   Android:layout_width="match_parent"
   Android:layout_height="wrap_content"
   Android:id="@+id/recyclerView"
   Android:layout_below="@id/my_toolbar"
   Android:layout_above="@+id/progressBar"
   Android:scrollbars="vertical"
   />
26
Yass

Vous pouvez le faire en incluant la ligne de code suivante dans votre Recyclerview

Android:scrollbarThumbVertical="@drawable/yoursdrawablefile

Le fichier dessinable dans mon cas est:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <gradient Android:startColor="#000" Android:endColor="#000"
        Android:angle="45"/>
    <corners Android:radius="6dp" />
</shape>
48
Naresh

Dans le cas où vous souhaitez améliorer le style de vos barres de défilement, créez deux fichiers de ressources dessinables dans votre dossier dessinable comme 1. scrollbar_track et 2. scrollbar_thumb

scrollbar_track.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <gradient
        Android:angle="0"
        Android:endColor="#9BA3C5"
        Android:startColor="#8388A4" />
        <corners Android:radius="6dp" />
</shape>

scrollbar_thumb.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <gradient
        Android:angle="0"
        Android:endColor="#b20111"
        Android:startColor="#cf1d2d" />

    <corners Android:radius="6dp" />

</shape> 

Maintenant, créez un style nommé scrollbar_style dans votre styles.xml fichier en tant que:

<style name="scrollbar_style">
    <item name="Android:scrollbarAlwaysDrawVerticalTrack">true</item>
    <item name="Android:scrollbarStyle">outsideOverlay</item>
    <item name="Android:scrollbars">vertical</item>
    <item name="Android:fadeScrollbars">true</item>
    <item name="Android:scrollbarThumbVertical">@drawable/scrollbar_thumb</item>
    <item name="Android:scrollbarTrackVertical">@drawable/scrollbar_track</item>
    <item name="Android:scrollbarSize">8dp</item>
    <item name="Android:scrollbarFadeDuration">800</item>
    <item name="Android:scrollbarDefaultDelayBeforeFade">500</item>
 </style>

Enfin, pour appliquer ce style à la barre de défilement dans votre vue de recyclage, ajoutez
style="@style/scrollbar_style"
à votre vue de recyclage.

Dans ton cas:

<Android.support.v7.widget.RecyclerView
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:id="@+id/recyclerView"
  style="@style/scrollbar_style"
  Android:layout_below="@id/my_toolbar"
  Android:layout_above="@+id/progressBar"
  Android:scrollbars="vertical"
 />
14
kaaloraat

Si vous devez changer la couleur lors de l'exécution, c'est le chemin.

import Android.content.Context;
import Android.graphics.Canvas;
import Android.graphics.Color;
import Android.graphics.PorterDuff;
import Android.graphics.drawable.Drawable;
import Android.support.annotation.ColorInt;
import Android.support.v7.widget.RecyclerView;
import Android.util.AttributeSet;

/**
 * Created on 22.3.2016.
 *
 * @author Bojan Kseneman
 * @description A recycler view that will draw the scroll bar with a different color
 */
public class CustomScrollBarRecyclerView extends RecyclerView {

    private int scrollBarColor = Color.RED;

    public CustomScrollBarRecyclerView(Context context) {
        super(context);
    }

    public CustomScrollBarRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomScrollBarRecyclerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setScrollBarColor(@ColorInt int scrollBarColor) {
        this.scrollBarColor = scrollBarColor;
    }

    /**
     * Called by Android {@link Android.view.View#onDrawScrollBars(Canvas)}
     **/
    protected void onDrawHorizontalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) {
        scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP);
        scrollBar.setBounds(l, t, r, b);
        scrollBar.draw(canvas);
    }

    /**
     * Called by Android {@link Android.view.View#onDrawScrollBars(Canvas)}
     **/
    protected void onDrawVerticalScrollBar(Canvas canvas, Drawable scrollBar, int l, int t, int r, int b) {
        scrollBar.setColorFilter(scrollBarColor, PorterDuff.Mode.SRC_ATOP);
        scrollBar.setBounds(l, t, r, b);
        scrollBar.draw(canvas);
    }
}

Ces méthodes sont définies dans la classe View, donc le même principe devrait fonctionner pour d'autres vues comme ScrollView et ListView.

1
Bojan Kseneman