RecyclerView için kaydırma çubuklarını kodda etkinleştirmenin herhangi bir yolu var mı?


105

Gördüğümüz gibi RecyclerView ListView'den daha etkili, bu yüzden projemde kullanmayı tercih ediyorum. Ancak son zamanlarda onu özel ViewGroup'uma koyarken sorun yaşıyorum. RecyclerView, kaydırma çubuklarını xml'de şu şekilde ayarlamak kolaydır:

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

Ama gerçekten RecyclerView kodunda kaydırma çubuklarını ayarlamak için herhangi bir yöntem bulamıyorum, denediğim şey:

mRecyclerView.setVerticalScrollBarEnabled(true);

ve sonra gördüğüm bu Android'in belgede.

Bu yüzden kendi LayoutManager'ımı yapmaya ve ihtiyacım olduğunu düşündüğüm işlevleri geçersiz kılmaya çalıştım. Ama sonunda başarısız oldum. Öyleyse, biri bana kendi LayoutManager'ımı nasıl yapmam gerektiğini söyleyebilir veya bana başka bir çözüm gösterebilir mi? Teşekkür ederim!

Yanıtlar:


126

Şu anda kaydırma çubuklarını programlı olarak etkinleştirmek imkansız görünmektedir. Bu davranışın nedeni, Android'in ya View.initializeScrollbarsInternal(TypedArray a)da View.initializeScrollbars(TypedArray a). Her iki yöntem de yalnızca RecyclerView'unuzu bir AttributeSet ile başlatırsanız çağrılır.
Geçici bir çözüm olarak, yalnızca RecyclerView ile yeni bir düzen dosyası oluşturmanızı öneririm: 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" />

Artık RecyclerView'ı istediğiniz her yere kaydırma çubuklarıyla şişirebilir ve ekleyebilirsiniz: 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
Şimdi bu şekilde kullanıyorum, ama bana sebebini söylediğin için gerçekten teşekkürler!
Kevin Liu

1
Artık kaydırma çubuklarını kolayca ekleyebilirsiniz! Bu yanıtı kontrol edin: stackoverflow.com/a/39125108/3162918
bendaf

73

Xml düzeninde dikey kaydırma çubuğunu ayarlayın

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

2
Bu yeterli mi, yoksa ayarlamamız android:scrollbarStyle="outsideOverlay"mı gerekiyor ?
IgorGanapolsky

1
@IgorGanapolsky Kaydırma çubuğunuzun üst üste gelip gelmeyeceğini belirtmek istemiyorsanız, ayarlamanıza gerek yok
Lilo

2
OP XML düzenini hiç kullanmadığı ve bu nedenle bunu programlı olarak elde etmek istediğinden, bu soruya gerçekten cevap vermiyor.
Andrew T.

Ve şu isteğe bağlı özellikleriniz varandroid:fadeScrollbars="true"
Junior Mayhé

39

Yalnızca xml özelliklerinde

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

kaydırarak renk nasıl ayarlanabilir? like recyclerview.scrollview.color = R.color.some_one
marlonpya

14

Bunun için kullanmayı tercih ederim ContextThemeWrapper.

Önce Style.xml'de tanımlayın:

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

Ve sonra RecyclerView'unuzu her başlattığınızda şunları kullanın ContextThemeWrapper:

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

7

Bunu bir XML düzenini şişirmeden yapabilirsiniz, ancak özel bir tema niteliği ve bir stil belirtmeniz gerekir:

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

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

Ardından, özniteliğin değerini temanızdaki stile ayarlayın:

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

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

Artık RecyclerView'ı dikey bir kaydırma çubuğu ile programlı olarak oluşturabilirsiniz:

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

1

Şunun gibi bir kod kullanın:

<androidx.recyclerview.widget.RecyclerView
 android:id="@+id/categoryRecyclerLayout"
 android:layout_width="414dp"
 android:layout_height="652dp"
 android:scrollbars="vertical" .... />
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.