Je mets la vue de carte à l'intérieur de scrollview, nous nous attendons à voir qu'en bas, la bordure devrait être montrée voir la photo ci-dessous. Mais ce n'est pas. Le problème est que je ne peux pas faire défiler vers le bas pour voir la bordure de cardview.
Toutes les solutions sur SO consistent à changer layout_margins en padding, mais ce n'est pas le cas pour cardview si nous voulons montrer la bordure. J'ai essentiellement tout essayé. Mais ne fonctionne toujours pas.
Image 1. défiler vers le bas ne peut pas voir la bordure
Photo 2. On peut voir le bord supérieur
Voici le code XML
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:custom="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
>
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fillViewport="true">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="8dp">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
>
...
</LinearLayout>
</CardView>
</LinearLayout>
références: ScrollView ne défile pas vers le bas
ScrollView coupe le haut et laisse de l'espace en bas
Je ne peux pas afficher LinearLayout en bas pour faire défiler la vue
Une solution que je viens de trouver consiste à envelopper CardView avec un LinearLayout ou un RelativeLayout et à définir son remplissage. Par exemple, si vous voulez un effet d’ombre portée dans cardView, disons 8dp, vous pouvez définir un remplissage 4dp de votre LinearLayout ou RelativeLayout et 4dp layout_margin de CardView.
J'ai rencontré le même problème et ai dû faire ce qui suit (la clé est l'encapsuleur LinearLayout autour de la vue carte où j'ai ajouté le paddingBottom ):
<ScrollView
Android:id="@+id/item_scrollview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scrollbars="none"
tools:visibility="visible">
<LinearLayout
Android:id="@+id/item_wrapper_layout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="@dimen/content_margin"
Android:paddingBottom="32dp"
Android:orientation="vertical">
<Android.support.v7.widget.CardView
Android:id="@+id/item_cardview"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
card_view:cardBackgroundColor="@color/colorPrimary"
card_view:cardCornerRadius="4dp"
card_view:cardUseCompatPadding="true">
Ajouter le wrapper LinearLayout autour de la vue carte est ce qui a fonctionné pour moi.
Notez également que je devais ajouter card_view: cardUseCompatPadding = "true" sur la vue de la carte pour que l’ombre de la bordure soit correcte.
Voici le résultat final où la boîte rouge indique où le remplissage a été ajouté lorsque la vue de la carte est développée et défilée.
Régler clipToPadding
sur false
sur ScrollView
fonctionne généralement pour moi:
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:clipToPadding="false"
Android:paddingBottom="16dp">
<com.google.Android.material.card.MaterialCardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="8dp"
app:contentPadding="8dp">
<TextView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
tools:text="Lorem ipsum..." />
</com.google.Android.material.card.MaterialCardView>
</ScrollView>
La meilleure solution consiste à ajouter enfin View avec marginTop
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
...................
...................
<View
Android:layout_width="match_parent"
Android:layout_height="0.1dp"
Android:layout_marginTop="10dp"/>
</LinearLayout>
</ScrollView>
Dans mon cas, je dois simplement changer ScrollView
avec NestedScrollView
pour résoudre le problème.
Pour info, ma NestedScrollView
est placée dans un fragment qui est un enfant de CoordinatorLayout
avec appbar_scrolling_view_behavior
défini.