Android中ScrollView导致布局高度缩小问题求助
Fixing ScrollView Layout Shrinkage Issue
Hey there! I see you ran into two common hiccups when adding a ScrollView to your layout: first the "ScrollView can only have one child" error, then your full-screen layout getting squished after wrapping everything in a LinearLayout. Let's fix this up step by step.
The Root of the Problem
Your outer LinearLayout was set to wrap_content for height, which means it only takes as much space as its content needs. On top of that, ScrollView doesn't automatically force its child to fill the entire screen if the content is shorter than the viewport—that's why your layout shrank instead of staying full-screen.
The Simple Fix
We need two key adjustments:
- Add
android:fillViewport="true"to your ScrollView. This tells the ScrollView to make its child stretch to fill the entire available screen space when content is short, while still letting it scroll when content overflows. - Change the outer LinearLayout's
android:layout_heightfromwrap_contenttomatch_parent, so it takes up all the height provided by the ScrollView.
Modified Layout Code
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#d5bad9" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-medium" android:gravity="center_horizontal" android:padding="4dp" android:paddingBottom="16dp" android:paddingTop="16dp" android:text="Team A" android:textColor="#616161" android:textSize="14sp" /> <TextView android:id="@+id/team_a_score" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="center_horizontal" android:padding="4dp" android:text="0" android:textColor="#000000" android:textSize="56sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginTop="10dp" android:onClick="addGoalA" android:text="GOAL" /> <TextView android:id="@+id/team_a_score_penalty" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="center_horizontal" android:padding="4dp" android:text="0" android:textColor="#000000" android:textSize="35sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginTop="8dp" android:onClick="addPenaltyA" android:text="Penalty" /> <TextView android:id="@+id/team_a_score_penalty_goal" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="center_horizontal" android:padding="4dp" android:text="0" android:textColor="#000000" android:textSize="35sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginTop="8dp" android:onClick="addPenaltyGoalA" android:text="penalty goal" /> </LinearLayout> <View android:layout_width="1dp" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" android:background="@color/colorPrimaryDark" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-medium" android:gravity="center_horizontal" android:padding="4dp" android:paddingBottom="16dp" android:paddingTop="16dp" android:text="Team B" android:textColor="#616161" android:textSize="14sp" /> <TextView android:id="@+id/team_b_score" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="center_horizontal" android:padding="4dp" android:text="0" android:textColor="#000000" android:textSize="56sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginTop="10dp" android:onClick="addGoalB" android:text="GOAL" /> <TextView android:id="@+id/team_b_score_penalty" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="center_horizontal" android:padding="4dp" android:text="0" android:textColor="#000000" android:textSize="35sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginTop="8dp" android:onClick="addPenaltyB" android:text="penalty" /> <TextView android:id="@+id/team_b_score_penalty_goal" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="center_horizontal" android:padding="4dp" android:text="0" android:textColor="#000000" android:textSize="35sp" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:layout_marginTop="8dp" android:onClick="addPenaltyGoalB" android:text="penalty goal" /> </LinearLayout> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="5dp" android:onClick="resetScore" android:text="RESET" /> </RelativeLayout> </LinearLayout> </ScrollView>
Why This Works
android:fillViewport="true"on the ScrollView ensures its child (the LinearLayout) stretches to fill the entire screen when content is short, instead of shrinking to fit. When content grows beyond the screen, it still lets you scroll normally.- Setting the LinearLayout's height to
match_parentlets it take up all the space provided by the ScrollView, so your inner RelativeLayout can maintain its full-screen behavior as intended.
内容的提问来源于stack exchange,提问作者mgloss
相关产品推荐
相关产品推荐

