J'ai une RecyclerView
et j'aimerais afficher la barre de défilement lorsqu'elle couvre plus d'une page.
Je n'ai aucune barre de défilement du tout. Une idée?
Ma mise en page:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<CheckBox
Android:id="@+id/cl_only_empty"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:elevation="5dp"
Android:text="@string/cl_only_empty"
Android:textColor="@color/white" />
<Android.support.v7.widget.RecyclerView
Android:id="@+id/callsList"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical" />
</LinearLayout>
La solution consiste à définir la barre de défilement verticale (ou horizontale) dans la présentation XML:
<Android.support.v7.widget.RecyclerView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical" />
Utilisez Android: attribut "scrollbars" "vertical" et Android: attribut scrollbarThumbVertical pour définir la couleur et attribut Android: scrollbarSize pour spécifier la taille:
<Android.support.v7.widget.RecyclerView
Android:id="@+id/document_listview"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="3dp"
Android:layout_marginTop="3dp"
Android:scrollbars="vertical"
Android:scrollbarThumbVertical="@Android:color/darker_gray"
Android:scrollbarSize="5dp"
Android:background="@color/activity_bg"
Android:dividerHeight="4dp" />
utiliser recyclerView comme ci-dessous en format XML
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerView"
Android:scrollbars="vertical"
Android:fadeScrollbars="true"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
et ajoutez le code ci-dessous pour scrollview en Java, tout ira bien
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false));
recyclerView.setHasFixedSize(true);
J'ai eu le même problème sur mon ancien HTC Desire X (api 16) uniquement.
Je ne sais pas pourquoi, mais les barres de navigation de RecyclerView
ne fonctionnent pas correctement sur ce périphérique si la propriété Android:background
n'est pas définie. Essayez de le régler sur n’importe quelle couleur ou sur transparent - cela fonctionne pour moi, espérons que cela vous aidera aussi
Essaye ça:
mLayoutManager = new LinearLayoutManager (this);
mLayoutManager.setSmoothScrollbarEnabled (true);
Scroller peut être défini sur recyclerview de plusieurs façons . D'abord, vous pouvez simplement ajouter une barre de défilement xml et définir sa propriété Android: fadeScrollbars = "false" pour l'afficher en permanence.
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recyclerViewMachine"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:scrollbars="vertical"
Android:fadeScrollbars="false"
Android:scrollbarThumbVertical="@Android:color/darker_gray"
Android:scrollbarSize="5dp"
Android:scrollbarStyle="outsideOverlay"/>
Ou vous pouvez créer un thème de style et l'utiliser de manière programmée lors de l'initialisation de Recyclerview
<style name="ScrollbarRecyclerView" parent="Android:Widget">
<item name="Android:scrollbars">vertical</item>
</style>
RecyclerView recyclerView = new RecyclerView(new ContextThemeWrapper(context, R.style.ScrollbarRecyclerView));
merci
Si vous êtes en mesure de définir ScrollBar par programme, vous pouvez utiliser ContextThemeWrapper
. Vous devez d’abord définir le style dans le fichier Style.xml:
<style name="ScrollbarRecyclerView" parent="Android:Widget">
<item name="Android:scrollbars">vertical</item>
</style>
Et appliquez ensuite le style lorsque vous initialisez votre RecylerView:
RecyclerView recyclerView = new RecyclerView(new ContextThemeWrapper(context, R.style.ScrollbarRecyclerView));
Outre l'attribut Android: scrollbars, vous devez ajouter l'attribut Android: fadeScrollbars dans l'état false, comme ceci:
<Android.support.v7.widget.RecyclerView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="vertical"
Android:fadeScrollbars="false"/>
De cette façon, la barre de défilement verticale est toujours affichée quand elle utilise plus de hauteur de la disposition autorisée.
Ajoutez le code à la vue Recycler XML pour rendre la barre de défilement visible.
<Android.support.v7.widget.RecyclerView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fadeScrollbars="false"
Android:scrollbars="vertical"
Android:scrollbarSize="@dimen/_2sdp"
Android:scrollbarThumbVertical="@color/white"/>
En fait, c'est à cause du thème. Les barres de défilement sont là mais ne peuvent pas être vues car elles se fondent dans la couleur de la vue parente ou dans une autre vue dans la ligne de ses ancêtres.
Vous pouvez créer une forme pouvant être dessinée et lui donner la couleur souhaitée, puis définir celle-ci comme barre de défilement verticale ou horizontale. Autrement dit, si vous ne voulez pas perdre votre temps avec les couleurs de votre thème.