コードでRecyclerViewのスクロールバーを有効にする方法はありますか?


105

見てきたように、RecyclerViewはListViewよりも効果的であるため、プロジェクトで使用することを好みます。しかし、最近、カスタムViewGroupに配置すると問題が発生します。RecyclerViewは、次のようにxmlでスクロールバーを簡単に設定できます。

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

しかし、RecyclerViewのコードでスクロールバーを設定するメソッドが本当に見つからないので、試してみました。

mRecyclerView.setVerticalScrollBarEnabled(true);

そして、Androidのドキュメントでこれを見ました。

だから私は自分のLayoutManagerを作成して、必要だと思った関数をオーバーライドしようとしました。しかし、最終的に私は失敗しました。だから、私が自分でLayoutManagerを作成する方法を教えてもらえますか?ありがとうございました!

回答:


125

現在のところ、プログラムでスクロールバーを有効にすることは不可能のようです。その動作の理由は、AndroidがView.initializeScrollbarsInternal(TypedArray a)またはを呼び出さないためですView.initializeScrollbars(TypedArray a)。どちらのメソッドも、AttributeSetを使用してRecyclerViewをインスタンス化する場合にのみ呼び出されます。
回避策として、RecyclerViewのみを使用して新しいレイアウトファイルを作成することをお勧めします。 vertical_recycler_view.xml

<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />

これで、スクロールバー付きのRecyclerViewを必要な場所に展開して追加できます。 MyCustomViewGroup.java

public class MyCustomViewGroup extends FrameLayout
{
    public MyCustomViewGroup(Context context)
    {
        super(context);

        RecyclerView verticalRecyclerView = (RecyclerView) LayoutInflater.from(context).inflate(R.layout.vertical_recycler_view, null);
        verticalRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
        addView(verticalRecyclerView);
    }
}

3
今はこの方法を使っていますが、理由を教えてくれて本当にありがとう!
Kevin Liu 14

1
これでスクロールバーを簡単に追加できます!この回答を確認してください:stackoverflow.com/a/39125108/3162918
bendaf

72

xmlレイアウトで垂直スクロールバーを設定する

<android.support.v7.widget.RecyclerView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:scrollbars="vertical" />

2
これで十分ですか、それとも設定する必要がありandroid:scrollbarStyle="outsideOverlay"ますか?
IgorGanapolsky 2015

1
@IgorGanapolskyスクロールバーをオーバーレイするかインセットするかを指定したい場合を除き、設定する必要はありません
Lilo

2
OPはXMLレイアウトをまったく使用せず、プログラムでこれを使用したかったため、これは実際には質問に答えません。
Andrew T.

そして、次のようなオプションの属性がありますandroid:fadeScrollbars="true"
JuniorMayhéDec

38

ちょうどxmlプロパティ

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recyclerView"
    android:scrollbars="vertical" <!-- type of scrollbar -->
    android:scrollbarThumbVertical="@android:color/darker_gray"  <!--color of scroll bar-->
    android:scrollbarSize="5dp"> <!--width of scroll bar-->

</android.support.v7.widget.RecyclerView>

スクロールで色を設定するにはどうすればよいですか?like recyclerview.scrollview.color = R.color.some_one
marlonpya

14

ContextThemeWrapperそのために使用したいと思います。

まず、Style.xmlで定義します。

<style name="ScrollbarRecyclerView" parent="android:Widget">
    <item name="android:scrollbars">vertical</item>
</style>

そして、RecyclerViewを初期化するときはいつでもContextThemeWrapper

RecyclerView recyclerView = new RecyclerView(new ContextThemeWrapper(context, R.style.ScrollbarRecyclerView));

7

XMLレイアウトを拡張することなくそれを行うことができますが、カスタムのテーマ属性とスタイルを宣言する必要があります。

<resources>
    <attr name="verticalRecyclerViewStyle" format="reference"/>

    <style name="VerticalRecyclerView" parent="android:Widget">
        <item name="android:scrollbars">vertical</item>
    </style>
</resources>

次に、属性の値をテーマのスタイルに設定します。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="verticalRecyclerViewStyle">@style/VerticalRecyclerView</item>
</style>

これで、垂直スクロールバーを使用してプログラムでRecyclerViewを作成できます。

RecyclerView recyclerView = new RecyclerView(context, null, R.attr.verticalRecyclerViewStyle);

1

次のようなコードを使用します。

<androidx.recyclerview.widget.RecyclerView
 android:id="@+id/categoryRecyclerLayout"
 android:layout_width="414dp"
 android:layout_height="652dp"
 android:scrollbars="vertical" .... />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.