it-swarm.com.de

Gibt es eine Möglichkeit, Bildlaufleisten für RecyclerView im Code zu aktivieren?

Wie wir gesehen haben, ist RecyclerView effektiver als ListView. Daher bevorzuge ich die Verwendung in meinem Projekt. Aber in letzter Zeit habe ich Probleme, wenn ich es in meine benutzerdefinierte ViewGroup lege. Mit RecyclerView können Sie Bildlaufleisten in XML wie folgt einrichten:

<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 festzulegen. Ich habe Folgendes versucht:

mRecyclerView.setVerticalScrollBarEnabled(true);

und dann habe ich this im Android-Dokument gesehen.

Also habe ich versucht, meinen eigenen LayoutManager zu erstellen und die Funktionen zu überschreiben, die ich für nötig hielt. Aber schließlich habe ich versagt. Kann mir jemand sagen, wie ich meinen eigenen LayoutManager erstellen oder mir nur eine andere Lösung zeigen soll? Vielen Dank!

92
Kevin Liu

Derzeit scheint es unmöglich zu sein, Bildlaufleisten programmgesteuert zu aktivieren. Der Grund für dieses Verhalten ist, dass Android weder View.initializeScrollbarsInternal(TypedArray a) noch View.initializeScrollbars(TypedArray a) aufruft. Beide Methoden werden nur aufgerufen, wenn Sie Ihre 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 überall aufblasen und 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);
    }
}
110
user1185087

Stellen Sie die vertikale Bildlaufleiste im XML-Layout ein

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

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>
28
Dinesh Sunny

Ich würde dafür lieber ContextThemeWrapper verwenden.

Zuerst definieren Sie in Style.xml:

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

Und wenn Sie dann RecyclerView initialisieren, verwenden Sie ContextThemeWrapper:

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

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

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

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

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

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