正如我们所看到的,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或者只是向我展示其他解决方案。谢谢!
答案 0 :(得分:109)
目前似乎无法以编程方式启用滚动条。这种行为的原因是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);
}
}
答案 1 :(得分:27)
仅限于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>
答案 2 :(得分:8)
我更愿意使用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));
答案 3 :(得分: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);
答案 4 :(得分:0)
使用如下代码:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/categoryRecyclerLayout"
android:layout_width="414dp"
android:layout_height="652dp"
android:scrollbars="vertical" .... />