Есть ли способ включить полосы прокрутки для RecyclerView в коде?



<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 и переопределить функции, которые я думал, что мне нужно. Но в конце концов я потерпел неудачу. Так может кто-нибудь сказать мне, как я должен сделать свой собственный LayoutManager или просто показать мне другое решение. Спасибо!

598   5  

5 ответов:

на данный момент, кажется, невозможно включить полосы прокрутки программно. Причина такого поведения заключается в том, что Android не вызывать View.initializeScrollbarsInternal(TypedArray a) или View.initializeScrollbars(TypedArray a). Оба метода вызываются только в том случае, если вы создаете экземпляр 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" />

теперь вы можете надуть и добавить 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>

Теперь вы можете создать RecyclerView программно с вертикальной полосой прокрутки:

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

Я бы предпочел использовать ContextThemeWrapper для этого.

сначала определите в стиле.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));

Comments

    Ничего не найдено.