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"
/>
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>
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, ajoutezstyle="@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"
/>
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.