web-dev-qa-db-ja.com

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

前述のように、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のドキュメントで this を見ました。

そこで、私は自分でLayoutManagerを作成し、必要だと思った関数をオーバーライドしようとしました。しかし、ついに失敗しました。だから誰も私に自分のLayoutManagerを作成する方法を教えてもらえますか、または他のソリューションを見せてください。ありがとうございました!

89
Kevin Liu

現時点では、プログラムでスクロールバーを有効にすることは不可能のようです。その動作の理由は、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" />

これで、スクロールバーを使用してご希望の場所にごみ箱を膨らませて追加できます: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);
    }
}
109
user1185087

XMLレイアウトで垂直スクロールバーを設定します

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

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>
28
Dinesh Sunny

そのために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));
9
Ayaz Alifov

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