有没有办法在代码中启用回收视图的滚动条?

正如我们所看到的,回收视图比 ListView 更有效,所以我更喜欢在我的项目中使用它。但是最近当我把它放入我的定制 ViewGroup 时遇到了一个麻烦。回收视图很容易在 xml 中设置滚动条,如下所示:

<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" />

但我实在找不到任何方法来设置回收视图的滚动条代码,我所尝试的是:

mRecyclerView.setVerticalScrollBarEnabled(true);

然后我在 Android 的文档中看到了 这个

所以我尝试制作我自己的 LayoutManager 并覆盖我认为我需要的函数。但最终我还是失败了。所以谁能告诉我如何制作我自己的 LayoutManager 或者给我看看其他的解决方案。谢谢!

112705 次浏览

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

Just in xml properties

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

现在您可以通过一个垂直滚动条以编程方式创建回收视图:

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>

And then whenever you initialize your RecyclerView use ContextThemeWrapper:

RecyclerView recyclerView = new RecyclerView(new ContextThemeWrapper(context, R.style.ScrollbarRecyclerView));

使用如下代码:

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/categoryRecyclerLayout"
android:layout_width="414dp"
android:layout_height="652dp"
android:scrollbars="vertical" .... />