22

我把cardview放在scrollview里面,我们希望看到底部应该显示边框(见下图)。但它不是。问题是我无法滚动到底部以查看卡片视图的边框。

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 不会滚动到底部

ScrollView 切断顶部并在底部留出空间

我无法在底部显示 LinearLayout 以滚动视图

Android ScrollView 拒绝滚动到底部

4

6 回答 6

28

更新

现在使用 aNestedScrollView和 a会更好MaterialCardView。我将此添加NestedScrollViewConstraintLayout.

<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.card.MaterialCardView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:cardUseCompatPadding="true">

如果没有 LinearLayout 包装器,这对我有用。

==================================================== ==========================

旧路留在这里

我遇到了同样的问题,必须执行以下操作(关键是我添加 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 包装器对我有用。

另请注意,我必须在 cardview 上添加card_view:cardUseCompatPadding="true"才能使边框阴影看起来正确。

这是最终结果,其中红色框显示了在扩展和向上滚动卡片视图时添加了填充的位置。

截屏

于 2016-09-13T15:45:24.147 回答
8

设置clipToPaddingfalseonScrollView通常对我有用:

    <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>
于 2018-12-25T13:21:01.167 回答
6

我刚刚找到的一种解决方案是使用 LinearLayout 或 RelativeLayout 包装 CardView 并设置其填充。例如,如果你想在 cardView 中添加阴影效果,比如说 8dp,你可以设置 LinearLayout 或 RelativeLayout 的 4dp padding 和 CardView 的 4dp layout_margin。

于 2016-08-15T21:25:52.393 回答
2

就我而言,我只需要更改即可ScrollView解决NestedScrollView问题。

仅供参考,我NestedScrollView被放置在一个片段中,该片段是CoordinatorLayoutwith appbar_scrolling_view_behaviorset 的子片段。

于 2018-11-01T01:39:23.020 回答
0

最好的解决方案是最后添加 View with 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>
于 2018-04-04T05:28:21.213 回答
0

我有同样的问题。将利润从孩子转移到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>
于 2020-03-21T07:34:12.440 回答