Frage Gibt es eine Möglichkeit Scrollbars für RecyclerView im Code zu aktivieren?


Wie wir gesehen haben, ist RecyclerView effektiver als ListView, also verwende ich es lieber in meinem Projekt. Aber vor kurzem habe ich ein Problem, wenn ich es in meine benutzerdefinierte ViewGroup einfüge. RecyclerView ist einfach zu scrollbars in xml wie folgt einzustellen:

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

Aber ich kann wirklich keine Methode finden, um die Bildlaufleisten im Code für RecyclerView zu setzen, was ich versucht habe ist:

mRecyclerView.setVerticalScrollBarEnabled(true);

und dann sah ich Dies im Android-Dokument.

Also habe ich versucht, meinen eigenen LayoutManager zu erstellen und die Funktionen außer Kraft zu setzen, von denen ich dachte, dass ich sie brauche. Aber schließlich habe ich versagt. Kann mir jemand sagen, wie ich meinen eigenen LayoutManager erstellen oder mir einfach eine andere Lösung zeigen soll? Vielen Dank!


76
2017-11-21 07:39


Ursprung


Antworten:


Im Moment scheint es unmöglich, Bildlaufleisten programmgesteuert zu aktivieren. Der Grund für dieses Verhalten ist, dass Android auch nicht anruft View.initializeScrollbarsInternal(TypedArray a) oder View.initializeScrollbars(TypedArray a). Beide Methoden werden nur aufgerufen, wenn Sie Ihren RecyclerView mit einem AttributeSet instanziieren.
Als Workaround würde ich vorschlagen, dass Sie eine neue Layoutdatei nur mit Ihrem RecyclerView erstellen: 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" />

Jetzt können Sie den RecyclerView mit Bildlaufleisten aufblasen und überall hinzufügen: 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);
    }
}

94
2017-12-04 16:20



Legen Sie die vertikale Bildlaufleiste im XML-Layout fest

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

53
2017-09-11 09:03



Nur in XML-Eigenschaften

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

22
2017-08-24 13:46



Sie können dies tun, ohne ein XML-Layout aufzublasen, aber Sie müssen ein benutzerdefiniertes Designattribut und einen Stil deklarieren:

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

    <style name="VerticalRecyclerView" parent="android:Widget">
        <item name="android:scrollbars">vertical</item>
    </style>
</resources>

Setzen Sie dann den Wert des Attributs auf den Stil in Ihrem Design:

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

    <item name="verticalRecyclerViewStyle">@style/VerticalRecyclerView</item>
</style>

Jetzt können Sie den RecyclerView programmatisch mit einer vertikalen Bildlaufleiste erstellen:

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

6
2017-11-27 20:40



Ich würde es vorziehen zu verwenden ContextThemeWrapper dafür.

Definieren Sie zuerst in Style.xml:

<style name="ScrollbarRecyclerView" parent="android:Widget">
    <item name="android:scrollbars">vertical</item>
</style>

Und dann, wenn Sie Ihre RecyclerView-Anwendung initialisieren ContextThemeWrapper:

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

5
2018-01-30 13:48