有没有办法在代码中为RecyclerView启用滚动条?

Kev*_*Liu 94 android scrollbars android-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" />
Run Code Online (Sandbox Code Playgroud)

但我真的找不到任何方法在RecyclerView的代码中设置滚动条,我试过的是:

mRecyclerView.setVerticalScrollBarEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后我在Android的文档中看到了这一点.

所以我试着制作自己的LayoutManager并覆盖我认为需要的功能.但最后我失败了.所以任何人都可以告诉我如何制作自己的LayoutManager或者只是向我展示其他解决方案.谢谢!

use*_*087 116

目前似乎无法以编程方式启用滚动条.这种行为的原因是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" />
Run Code Online (Sandbox Code Playgroud)

现在,您可以在任何地方使用滚动条来扩充和添加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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我现在正在使用这种方式,但非常感谢告诉我原因! (3认同)

Lil*_*ilo 64

在xml布局中设置垂直滚动条

<android.support.v7.widget.RecyclerView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:scrollbars="vertical" />
Run Code Online (Sandbox Code Playgroud)

  • 这够了,还是我们还要设置`android:scrollbarStyle ="outsideOverlay"`? (2认同)
  • 这并没有真正回答这个问题,因为OP根本没有使用XML布局,因此希望以编程方式进行此操作. (2认同)

Din*_*nny 28

只是在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>
Run Code Online (Sandbox Code Playgroud)


Aya*_*fov 11

我更愿意使用ContextThemeWrapper它.

首先在Style.xml中定义:

<style name="ScrollbarRecyclerView" parent="android:Widget">
    <item name="android:scrollbars">vertical</item>
</style>
Run Code Online (Sandbox Code Playgroud)

然后,无论何时初始化您的RecyclerView使用ContextThemeWrapper:

RecyclerView recyclerView = new RecyclerView(new ContextThemeWrapper(context, R.style.ScrollbarRecyclerView));
Run Code Online (Sandbox Code Playgroud)


Bla*_*der 7

您可以在不扩展XML布局的情况下执行此操作,但您需要声明自定义主题属性和样式:

<resources>
    <attr name="verticalRecyclerViewStyle" format="reference"/>

    <style name="VerticalRecyclerView" parent="android:Widget">
        <item name="android:scrollbars">vertical</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

然后将属性的值设置为主题中的样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="verticalRecyclerViewStyle">@style/VerticalRecyclerView</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

RecyclerView recyclerView = new RecyclerView(context, null, R.attr.verticalRecyclerViewStyle);
Run Code Online (Sandbox Code Playgroud)


Ach*_*uru 6

使用如下代码:

<androidx.recyclerview.widget.RecyclerView
 android:id="@+id/categoryRecyclerLayout"
 android:layout_width="414dp"
 android:layout_height="652dp"
 android:scrollbars="vertical" .... />
Run Code Online (Sandbox Code Playgroud)