前述のように、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を作成する方法を教えてもらえますか、または他のソリューションを見せてください。ありがとうございました!
現時点では、プログラムでスクロールバーを有効にすることは不可能のようです。その動作の理由は、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);
}
}
XMLレイアウトで垂直スクロールバーを設定します
<Android.support.v7.widget.RecyclerView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical" />
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>
そのために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));
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);