如何为scrollView设置最大高度?

4

如何为scrollView设置maxHeight属性?我有一个LinearLayout,我通过编程向该布局添加一些视图(行)。当行达到scrollView的maxHeight时,如何显示滚动条?ScrollView位于CardView中。

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textViewTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.cardview.widget.CardView
        android:id="@+id/cardView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constrainedHeight="true"
        app:layout_constraintBottom_toTopOf="@+id/cardView2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_max="100dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textViewTitle">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:id="@+id/linear"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" />
        </ScrollView>


    </androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
3个回答

19

因为你正在使用ConstraintLayout,所以你需要向CardView添加2个约束条件。

app:layout_constraintTop 

app:layout_constraintBotttom

您还需要添加以下几行代码

app:layout_constrainedHeight="true"

app:layout_constraintHeight_max="300dp" // Change this to your maximum height

它应该看起来像这样

<androidx.cardview.widget.CardView 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    app:cardCornerRadius="@dimen/card_radius_10"
    app:layout_constrainedHeight="true"
    app:layout_constraintHeight_max="300dp" // Change this to your maximum height
    app:layout_constraintEnd_toEndOf="parent" 
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintBottom_toBottomOf="parent" //Change based on your layout
    app:layout_constraintTop_toTopOf="parent"> //Change based on your layout

它隐藏了哪个视图? 在布局编辑器中还是在实际设备上? - Gil Goldzweig
在布局编辑器中添加了哪些约束条件? - Gil Goldzweig
如果您在运行具有实际内容的设备时看不到卡片,请将CardView的高度更改为0dp - Gil Goldzweig
当我像这样尝试:https://gist.githubusercontent.com/gilgoldzweig/06bfa827439ed1fb1d1ea101eb1361e5时,它似乎可以工作。 - Gil Goldzweig
嗯...不起作用。也许问题在我的第二个卡片视图上。cardView2被约束在cardView下方。 - Benfactor
显示剩余2条评论

2

在您的ScrollView中使用此属性,并将LinearLayout的高度更改为match_parent。

android:fillViewport="true"

像这样

<ScrollView 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        android:fillViewport="true"> 

        <LinearLayout 
            android:id="@+id/layout" android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:orientation="vertical" /> 

    </ScrollView>

我需要最大高度。例如:如果项目超过3个,则显示滚动条,否则使用自适应内容显示项目。 - Benfactor
你尝试过在线性布局中设置weightsum吗? - Hasnat Hasan

0
更改您的滚动视图的父视图高度。在您的情况下,CardView是父布局。因此,请设置CardView的高度,例如 android:layout_height="350dp" 或者根据需要使用线性布局中的权重来设置高度。如果您在适配器或类似位置使用此布局,则只需使用数字设置高度即可。

1
如果在布局中一个项目或两个项目,则会显示空白空间。 - Benfactor
请您详细说明在哪里显示空格?同时重新发布新代码……我会检查是否有任何问题。 - Irfan Yaqub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接