Pertanyaan Apakah ada cara untuk mengaktifkan scrollbar untuk RecyclerView dalam kode?


Seperti yang kita lihat, RecyclerView lebih efektif daripada ListView, jadi saya lebih suka menggunakannya dalam proyek saya. Namun baru-baru ini saya memiliki masalah ketika memasukkannya ke dalam ViewGroup kustom saya. RecyclerView mudah untuk mengatur scrollbar di xml seperti ini:

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

Tapi saya benar-benar tidak dapat menemukan metode apa pun untuk mengatur scrollbars dalam kode untuk RecyclerView, apa yang saya coba adalah:

mRecyclerView.setVerticalScrollBarEnabled(true);

dan kemudian saya melihat ini dalam dokumen Android.

Jadi saya mencoba membuat LayoutManager saya sendiri dan mengesampingkan fungsi yang saya pikir saya butuhkan. Tetapi akhirnya saya gagal. Jadi, siapa pun dapat memberi tahu saya bagaimana seharusnya saya membuat LayoutManager saya sendiri atau hanya menunjukkan solusi lain. Terima kasih!


76
2017-11-21 07:39


asal


Jawaban:


Saat ini tampaknya mustahil untuk mengaktifkan scroll bar secara terprogram. Alasan untuk perilaku itu adalah bahwa Android juga tidak memanggil View.initializeScrollbarsInternal(TypedArray a) atau View.initializeScrollbars(TypedArray a). Kedua metode hanya dipanggil jika Anda instantiate RecyclerView Anda dengan AttributeSet.
Sebagai solusi saya akan menyarankan, bahwa Anda membuat file layout baru dengan hanya RecyclerView Anda: 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" />

Sekarang Anda dapat mengembang dan menambahkan RecyclerView dengan scrollbars ke mana pun Anda inginkan: 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



Atur bilah gulir vertikal dalam tata letak xml

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

53
2017-09-11 09:03



Hanya dalam properti 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>

22
2017-08-24 13:46



Anda dapat melakukannya tanpa menggembungkan tata letak XML, tetapi Anda harus mendeklarasikan atribut tema khusus dan gaya:

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

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

Kemudian atur nilai atribut ke gaya dalam tema Anda:

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

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

Sekarang Anda dapat membuat RecyclerView secara terprogram dengan scrollbar vertikal:

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

6
2017-11-27 20:40



Saya lebih suka menggunakannya ContextThemeWrapper untuk itu.

Mendefinisikan pertama di Style.xml:

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

Dan kemudian setiap kali Anda menginisialisasi penggunaan RecyclerView Anda ContextThemeWrapper:

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

5
2018-01-30 13:48