Android FrameLayout实现图片叠加时如何将下拉控件置于底部
问题修正方案
核心问题说明
你的布局无法达到预期效果主要是三个错误导致:
- 第二张背景图仅配置了水平居中属性,没有配置垂直居中,无法实现全屏居中放置
- 包裹语言选择控件的LinearLayout内部只有一个weight=2的子布局,没有占位空白控件撑起上方空间,导致语言控件直接从页面顶部开始排列
- FrameLayout下使用了仅RelativeLayout子元素生效的
layout_alignParentTop、layout_centerHorizontal属性,没有实际作用
修正后的完整布局代码
<FrameLayout 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:layout_width="match_parent" android:layout_height="match_parent"> <!-- 第一张背景图 铺满全屏 --> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/image_1" android:scaleType="fitXY" /> <!-- 第二张背景图 全屏居中 --> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginBottom="20dp" android:background="@drawable/image_2" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".ui.instructionview.WelcomeActivity"> <!-- 占位空白View 撑起上方空间 权重可自行调整位置高低 --> <View android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="3" /> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:orientation="vertical"> <TextView android:id="@+id/preferredData" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="@dimen/common_10dp" android:text="" android:layout_marginBottom="@dimen/common_10dp" android:textAppearance="@style/TextAppearance.AppCompat.Headline" android:textColor="#2c5a99" android:textStyle="bold" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="@dimen/common_20dp" android:layout_marginRight="@dimen/common_20dp" android:background="@drawable/bg_dashboard_line_outline"> <TextView android:id="@+id/language_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@+id/change_lang" android:gravity="left" android:padding="@dimen/common_10dp" android:layout_marginLeft="@dimen/common_20dp" android:text="English" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:textColor="#343f45" /> <Button android:id="@+id/change_lang" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_marginRight="@dimen/common_30dp" android:backgroundTint="#183274" android:gravity="center_vertical" android:text="CHANGE" /> </RelativeLayout> </LinearLayout> </LinearLayout> </FrameLayout>
修改说明
- 把第二张背景图的
layout_gravity从center_horizontal改为center,实现水平+垂直居中 - 在语言控件上方增加了空白占位View,通过weight分配把语言控件压到页面底部,你可以调整占位View的weight值调整控件距离底部的高度
- 替换了废弃的
fill_parent为官方推荐的match_parent,移除了FrameLayout下无效的布局属性
内容的提问来源于stack exchange,提问作者ekta
相关产品推荐
相关产品推荐

