私はスクロールビュー内にカードビューを配置しています。下部に境界線が表示されるはずです(下の画像を参照)。しかし、そうではありません。問題は、cardviewの境界線を表示するために下にスクロールできないことです。
SO=のすべての解決策は、layout_marginsをパディングに変更することですが、ボーダーを表示したい場合は、cardviewの場合ではありません。基本的にすべてを試しましたが、それでも機能しません。
写真1.下にスクロールすると枠が見えない
写真2.上のボーダーが見える
以下は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>
ScrollViewは上部を切り取り、下部にスペースを残します
私が見つけた1つの解決策は、CardViewをLinearLayoutまたはRelativeLayoutでラップし、そのパディングを設定することです。たとえば、cardViewでドロップシャドウ効果が必要な場合(たとえば8dp)、LinearLayoutまたはRelativeLayoutの4dpパディングとCardViewの4dp layout_marginを設定できます。
私は同じ問題に遭遇し、以下を実行する必要がありました(キーは、paddingBottomを追加したcardviewの周りのLinearLayoutラッパーです):
<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">
Cardviewの周りにLinearLayoutラッパーを追加すると、うまくいきました。
また、境界線の影が正しく見えるようにするには、カードビューにcard_view:cardUseCompatPadding = "true"を追加する必要がありました。
これが最終的な結果です。赤いボックスは、カードビューが展開されて上にスクロールされたときにパディングが追加された場所を示しています。
clipToPadding
でfalse
をScrollView
に設定すると、通常はうまくいきます。
<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>
同じ問題がありました。子からScrollView
へのマージンの移動がうまくいきました
<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:layout_margin="8dp">
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
>
...
</LinearLayout>
</CardView>
</LinearLayout>
最善の解決策は、ついに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>
私の場合、問題を解決するにはScrollView
をNestedScrollView
に変更するだけです。
参考までに、私のNestedScrollView
は、CoordinatorLayout
の子であるフラグメント内にappbar_scrolling_view_behavior
セットする。