2016-02-15 3 views
20

Как изменить цвет полосы прокрутки в recyclerView?Цвет полосы прокрутки в RecyclerView

У меня есть полоса прокрутки, но я хочу изменить ее цвет. Мой recyclerView как это:

<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" 
    /> 

ответ

31

Вы можете сделать это, в том числе следующую строку кода в Recyclerview

android:scrollbarThumbVertical="@drawable/yoursdrawablefile

вытяжке файл в моем случае:

<?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> 
+0

это работает, спасибо большое! – Yass

+0

приветствуется ........ – Naresh

+0

awesome !!!!!!!! –

7

Если вы хотите еще больше стилизовать свои полосы прокрутки, создайте в своей выпадающей папке два файла ресурса с возможностью рисования в виде 1. scrollbar_track и 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> 

Теперь создать стиль с именем scrollbar_style в файле styles.xml как:

<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> 

Наконец, применить этот стиль к скроллингу в вашем recyclerview, добавьте
style="@style/scrollbar_style"
к вашему recyclerview.

В вашем случае:

<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" 
/> 
+1

спасибо kaaloraat, он работает тоже, но решение выше лучше для новичков. – Yass

+0

Хорошо. Это не так сложно. – kaaloraat

+0

Хорошо подробный ответ! –

1

Если вам необходимо изменить цвет во время выполнения, это путь.

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); 
    } 
} 

Эти методы определены в классе вида, поэтому тот же принцип должен работать с другими видами, такими как ScrollView и ListView.

+0

Привет, это работает, но меняется только цвет большого пальца, можно ли изменить цвет дорожки прокрутки? – Shruti

Смежные вопросы