क्या कोड में RecyclerView के लिए स्क्रॉलबार सक्षम करने का कोई तरीका है?


105

जैसा कि हमने देखा, RecyclerView ListView की तुलना में अधिक प्रभावी है, इसलिए मैं इसे अपने प्रोजेक्ट में उपयोग करना पसंद करता हूं। लेकिन हाल ही में मुझे एक परेशानी है जब मैंने इसे अपने कस्टम व्यूग्रुप में रखा। 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 के दस्तावेज़ में देखा ।

इसलिए मैंने अपना स्वयं का लेआउट प्रबंधक बनाने और उन कार्यों को ओवरराइड करने की कोशिश की जिन्हें मैंने सोचा था कि मुझे ज़रूरत है। लेकिन आखिरकार मैं असफल रहा। तो क्या कोई मुझे बता सकता है कि मुझे अपना खुद का लेआउटमैन कैसे बनाना चाहिए या बस मुझे एक अन्य समाधान दिखाना चाहिए। धन्यवाद!

जवाबों:


125

फिलहाल यह स्क्रॉल सलाखों को प्रोग्रामेटिक रूप से सक्षम करने के लिए असंभव प्रतीत होता है। उस व्यवहार का कारण यह है कि 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);
    }
}

3
मैं अब इस तरह का उपयोग कर रहा हूं, लेकिन वास्तव में मुझे कारण बताने के लिए धन्यवाद!
— केविन लियू

1
अब आप आसानी से स्क्रॉलबार जोड़ सकते हैं! इस उत्तर को जांचें: stackoverflow.com/a/39125108/3162918
— bendaf

72

Xml लेआउट में वर्टिकल स्क्रॉलबार सेट करें

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

2
क्या यह पर्याप्त है, या क्या हमें भी सेट करना है android:scrollbarStyle="outsideOverlay"?
— इगगानापोलस्की

1
@IgorGanapolsky को इसे सेट करने की आवश्यकता नहीं है, जब तक कि आप यह निर्दिष्ट नहीं करना चाहते हैं कि क्या आपका स्क्रॉलबार ओवरलेड या इनसेट होगा
— Lilo

2
यह वास्तव में सवाल का जवाब नहीं देता है, क्योंकि ओपी ने XML लेआउट का उपयोग नहीं किया था और इस प्रकार, यह प्रोग्रामेटिक रूप से करना चाहता था।
— एंड्रयू टी।

और आपके पास वैकल्पिक विशेषताएं हैं जैसेandroid:fadeScrollbars="true"
— जूनियर मेहे

38

बस 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>

स्क्रॉल से रंग कैसे सेट किया जा सकता है? जैसे recyclerview.scrollview.color = R.color.some_one
— marlonpya

14

मैं उस के लिए उपयोग करना पसंद करूंगा 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));

7

आप 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);

1

एक कोड का उपयोग करें जैसे:

<androidx.recyclerview.widget.RecyclerView
 android:id="@+id/categoryRecyclerLayout"
 android:layout_width="414dp"
 android:layout_height="652dp"
 android:scrollbars="vertical" .... />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.