有没有什么办法在代码中启用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的文档中看到了这个 。

所以我试图做我自己的LayoutManager,并覆盖我认为我需要的function。 但最后我失败了。 所以谁能告诉我,我应该如何使自己的LayoutManager或只是给我一个其他的解决scheme。 谢谢!

目前似乎不可能以编程方式启用滚动条。 这种行为的原因是Android不调用View.initializeScrollbarsInternal(TypedArray a)View.initializeScrollbars(TypedArray a) 。 只有在用AttributeSet实例化RecyclerView时才会调用这两种方法。
作为一种解决方法,我会build议您只使用RecyclerView创build一个新的布局文件: 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); } } 

在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> 

您可以在不扩充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> 

现在,您可以使用垂直滚动条以编程方式创buildRecyclerView:

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

我宁愿使用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));