Есть ли способ включить полосы прокрутки для 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" />
Но я действительно не могу найти какой-либо метод для установки полос прокрутки в коде для RecyclerView, что я пробовал:
mRecyclerView.setVerticalScrollBarEnabled(true);
а затем я увидел этот в документе Android.
Итак, я попытался создать свой собственный LayoutManager и переопределить функции, которые, как мне казалось, мне нужны. Но в итоге я потерпел неудачу. Так может ли кто-нибудь сказать мне, как мне сделать свой собственный LayoutManager или просто показать мне другое решение. Спасибо!
Ответы
Ответ 1
В настоящее время невозможно программировать полосы прокрутки. Причина такого поведения заключается в том, что Android не вызывает либо View.initializeScrollbarsInternal(TypedArray a)
, либо View.initializeScrollbars(TypedArray a)
. Оба метода вызывается только в том случае, если вы создаете экземпляр RecyclerView с помощью AttributeSet.
В качестве обходного пути я бы предположил, что вы создаете новый файл макета только с помощью 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);
}
}
Ответ 2
Установите вертикальную полосу прокрутки в макете xml
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" />
Ответ 3
Просто в свойствах 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>
Ответ 4
Я бы предпочел использовать ContextThemeWrapper
для этого.
Сначала определите в Style.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));
Ответ 5
Вы можете сделать это без раздувания 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);
Ответ 6
Используйте код вроде:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/categoryRecyclerLayout"
android:layout_width="414dp"
android:layout_height="652dp"
android:scrollbars="vertical" .... />