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"
/>
これを行うには、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>
スクロールバーをさらにスタイル設定したい場合は、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"
/>
実行時に色を変更する必要がある場合、これが方法です。
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などの他のビューでも同じ原則が機能するはずです。