web-dev-qa-db-ja.com

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

これを行うには、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>
48
Naresh

スクロールバーをさらにスタイル設定したい場合は、1つのscrollbar_trackと2のscrollbar_thumbとして、描画可能フォルダーに2つの描画可能リソースファイルを作成します。

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> 

次に、styles.xmlファイルにscrollbar_styleという名前のスタイルを作成します。

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

最後にこのスタイルをリサイクラビューのスクロールバーに適用するには、
style="@style/scrollbar_style"
リサイクラービューに。

あなたの場合:

<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

実行時に色を変更する必要がある場合、これが方法です。

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

これらのメソッドはViewクラスで定義されているため、ScrollViewやListViewなどの他のビューでも同じ原則が機能するはずです。

1
Bojan Kseneman