1. ホーム
  2. android

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

2022-08-22 11:36:41

質問

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 を作成すべきか、または他の解決策を教えてください。ありがとうございます。

どのように解決するには?

現時点では、プログラム的にスクロールバーを有効にすることはできないようです。その動作の理由は、Android では View.initializeScrollbarsInternal(TypedArray a) または View.initializeScrollbars(TypedArray a) . どちらのメソッドも、RecyclerViewをAttributeSetでインスタンス化した場合のみ呼び出されます。

回避策として、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);
    }
}