Android->ScrollView嵌套LinearLayout布局不能撑满全屏的问题处理

本文解决了ScrollView内的元素无法正确填充的问题,提供了设置android:fillViewport=true的解决方案,并解释了其背后的原因。

解决方法:
 当ScrollView里的元素想填满ScrollView时,使用"fill_parent"或者"match_parent"是不管用的,必需为ScrollView设置:
android:fillViewport="true"
  


解决理念:

   当ScrollView没有fillVeewport=“true”时, 里面的元素(比如LinearLayout)会按照wrap_content来计算(不论它是否设了"fill_parent"或者"match_parent"),而如果LinearLayout的元素设置了fill_parent,那么也是不管用的,因为LinearLayout依赖里面的元素,而里面的元素又依赖LinearLayout,这样自相矛盾.所以里面元素设置了fill_parent,也会当做wrap_content来计算.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <!-- 语言选择器 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:orientation="horizontal"> <Spinner android:id="@+id/language_spinner1" android:layout_width="0dp" android:layout_height="50dp" android:layout_marginRight="10dp" android:layout_weight="1" /> <Spinner android:id="@+id/language_spinner2" android:layout_width="0dp" android:layout_height="50dp" android:layout_marginLeft="10dp" android:layout_weight="1" /> </LinearLayout> <!-- 消息列表(占满中间空间) --> <ListView android:id="@+id/messageListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:divider="@android:color/transparent" android:dividerHeight="8dp" android:padding="16dp" /> <!--ScrollView包裹输入区域,确保键盘弹出时可滚动 --> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true"> <!-- 关键:确保ScrollView占满可用空间 --> <!-- 输入区域 --> <LinearLayout android:id="@+id/line1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#F5F5F5" android:orientation="horizontal" android:padding="8dp"> <!-- 语音/键盘切换按钮 --> <ImageButton android:id="@+id/voiceTextToggleButton" android:layout_width="35dp" android:layout_height="35dp" android:layout_gravity="center_vertical" android:background="@mipmap/icon_shengbo" android:padding="8dp" /> <!-- 文字输入框 --> <EditText android:id="@+id/textInputEditText" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" android:layout_weight="1" android:background="@android:color/white" android:ems="10" android:gravity="top" android:hint="输入消息..." android:minHeight="35dp" android:padding="12dp" /> <!-- 语音输入按钮(默认隐藏) --> <Button android:id="@+id/recordButton" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" android:layout_weight="1" android:text="按住 说话" android:textColor="#FFFFFF" android:visibility="gone" android:textSize="16sp" /> </LinearLayout> </ScrollView> </LinearLayout>如何解决当键盘弹起来后输入框与键盘之间有空隙
07-22
<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/max_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_blue" tools:context=".MainActivity"> <View android:id="@+id/mask_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" android:alpha="0" /> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingStart="10dp" android:paddingEnd="10dp"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" android:id="@+id/top_bulb_off"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/back_white" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Smart Lamp" android:textSize="18sp" android:textStyle="bold" android:textColor="@color/white" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/home_setting_on" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:gravity="center_horizontal" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:src="@drawable/location_white" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bedroom" android:textColor="@color/white" android:textSize="14sp" /> </LinearLayout> </LinearLayout> </FrameLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:id="@+id/top_bulb_on"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/home_back" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Smart Lamp" android:textSize="18sp" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/home_setting" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:gravity="center_horizontal" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:src="@drawable/location_gray" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bedroom" android:textColor="@color/gray333" android:textSize="14sp" /> </LinearLayout> </LinearLayout> </FrameLayout> <LinearLayout android:id="@+id/button_group" android:layout_width="match_parent" android:layout_height="55dp" android:layout_marginStart="4dp" android:layout_marginTop="30dp" android:gravity="center_vertical" android:orientation="horizontal" android:clipToPadding="false" android:clipChildren="false"> <com.google.android.material.button.MaterialButton android:id="@+id/auto_button" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/white_button" android:gravity="center" android:padding="0dp" android:text="Auto" android:textColor="@color/gray66" android:textSize="8sp" app:backgroundTint="@null" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <com.google.android.material.button.MaterialButton android:id="@+id/white_button" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/white_button_selector" android:gravity="center" android:padding="0dp" app:backgroundTint="@null" app:icon="@drawable/color_edit" app:iconGravity="textEnd" app:iconPadding="0dp" app:iconTint="@color/black" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <com.google.android.material.button.MaterialButton android:id="@+id/orange_button" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/orange_button_selector" android:layout_marginStart="10dp" android:layout_marginEnd="10dp" android:gravity="center" android:padding="0dp" app:backgroundTint="@null" app:iconGravity="textEnd" app:iconPadding="0dp" app:iconTint="@color/black" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <com.google.android.material.button.MaterialButton android:id="@+id/deepblue_button" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/deepblue_button_selector" android:gravity="center" android:padding="0dp" app:backgroundTint="@null" app:iconGravity="textEnd" app:iconPadding="0dp" app:iconTint="@color/black" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <com.google.android.material.button.MaterialButton android:id="@+id/blue_button" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/blue_button_selector" android:gravity="center" android:padding="0dp" app:backgroundTint="@null" app:iconGravity="textEnd" app:iconPadding="0dp" app:iconTint="@color/black" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <com.google.android.material.button.MaterialButton android:id="@+id/red_button" android:layout_width="40dp" android:layout_height="40dp" android:background="@drawable/red_button_selector" android:gravity="center" android:padding="0dp" app:backgroundTint="@null" app:iconGravity="textEnd" app:iconPadding="0dp" app:iconTint="@color/black" /> <View android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.3"/> </LinearLayout> <TextView android:id="@+id/percent_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="15dp" android:text="100%" android:textSize="18sp" /> <TextView android:id="@+id/off" android:visibility="gone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="15dp" android:text="OFF" android:textColor="@color/white" android:textSize="20sp" /> <FrameLayout android:id="@+id/bulb_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp"> <ImageView android:id="@+id/blub_dark" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/blub_dark"/> <ImageView android:id="@+id/blub_max_init" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@drawable/bulb_light" /> </FrameLayout> <ImageView android:id="@+id/switch_on" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:src="@drawable/switch_on" /> </LinearLayout> </ScrollView> <LinearLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="800dp" android:orientation="vertical" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/pull_up" android:layout_width="match_parent" android:layout_height="40dp" android:layout_gravity="center_horizontal" android:paddingTop="20dp" android:background="@color/white" android:src="@drawable/pull"/> <LinearLayout android:layout_width="match_parent" android:layout_height="800dp" android:background="@color/white" android:orientation="vertical"> <!-- 横向菜单 --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:layout_marginBottom="20dp" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:text="Mode" android:textColor="@color/black" android:drawableTop="@drawable/mode"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:text="Schedule" android:textColor="@color/black" android:drawableTop="@drawable/schedule"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:text="Away" android:textColor="@color/black" android:drawableTop="@drawable/away"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/transparent" android:text="Timer" android:textColor="@color/black" android:drawableTop="@drawable/timer"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="10dp" android:background="@color/bg_gray"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="34dp" android:paddingTop="20dp" android:paddingBottom="25dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Today" android:textColor="@color/gray_99999" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:orientation="horizontal"> <!-- 第一组 --> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/gray333" android:textStyle="bold" android:text="12.1" android:textSize="23sp"/> <TextView android:layout_marginStart="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="@color/gray333" android:text="h"/> </LinearLayout> <!-- 第二组 --> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/gray333" android:textStyle="bold" android:text="125.1" android:textSize="23sp"/> <TextView android:layout_marginStart="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="@color/gray333" android:text="Kmh"/> </LinearLayout> <!-- 第三组 --> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/gray333" android:textStyle="bold" android:text="992.3" android:textSize="23sp"/> <TextView android:layout_marginStart="3dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" android:textColor="@color/gray333" android:text="Kmh"/> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Runtime" android:textColor="@color/gray_99999" android:layout_weight="1" android:textSize="14sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Usage" android:textColor="@color/gray_99999" android:layout_weight="1" android:textSize="14sp"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Saving" android:textColor="@color/gray_99999" android:layout_weight="1" android:textSize="14sp"/> </LinearLayout> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="10dp" android:background="@color/bg_gray"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="18dp" android:layout_marginEnd="18dp" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Favorite" android:textColor="@color/gray333" android:layout_weight="1" android:textStyle="normal"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:src="@drawable/favorite_selector"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginStart="15dp" android:background="@color/gray_EB"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="18dp" android:layout_marginEnd="18dp" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Device Sharing" android:textColor="@color/gray333" android:layout_weight="1" android:textStyle="normal"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon_shared"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="2dp" android:text="2" android:textColor="#B5BAC4" android:textSize="14sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/device_share"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginStart="15dp" android:background="@color/gray_EB"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="18dp" android:layout_marginEnd="18dp" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="FAQ & Feedback" android:textColor="@color/gray333" android:layout_weight="1" android:textStyle="normal"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/device_share"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginStart="15dp" android:background="@color/gray_EB"/> </LinearLayout> </LinearLayout> </androidx.core.widget.NestedScrollView> </LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> 这是我总的xml,bulbImage支持滑动操作,但是横屏的时候这个滑动操作会被认为成scrollview的滑动,其次因为下面有一个buttonbevior,横屏的时候下面那个button都不显示,滑动到底也没有,这两个问题如何解决
最新发布
08-22
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值