Есть ли способ включить полосы прокрутки для 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 или просто показать мне другое решение. Спасибо!
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.javapublic 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