在Android Studio中如何实现横竖屏切换时XML布局屏幕尺寸一致
横竖屏XML布局尺寸统一实现方案
方案1:统一尺寸资源配置
- 在
res目录下分别创建values-port(竖屏专属资源)和values-land(横屏专属资源)两个子目录 - 两个目录下都新建
dimens.xml文件,把需要统一的布局尺寸在两个文件中设置为相同的数值,示例:
<!-- values-port/dimens.xml 和 values-land/dimens.xml 写相同配置 --> <dimen name="card_width">160dp</dimen> <dimen name="card_padding">12dp</dimen>
- 布局XML中所有需要固定尺寸的位置都引用
@dimen/xxx的资源值,不要直接写死数值
方案2:用比例约束代替固定尺寸
- 根布局优先使用
ConstraintLayout,通过百分比约束、宽高比配置控制元素尺寸,示例:
<!-- 控件宽度固定为父布局宽度的40%,横竖屏自动适配占比 --> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintWidth_percent="0.4" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
- 如需固定物理显示尺寸,统一使用
dp作为单位,不要使用px,dp单位和设备密度绑定,横竖屏切换时物理显示大小不会变化
方案3:禁止切换时Activity重建
- 如果不需要横竖屏切换时加载不同布局,直接在
AndroidManifest.xml对应的Activity节点添加属性:
<activity android:name=".YourActivity" android:configChanges="orientation|screenSize|smallestScreenSize"/>
- 配置后横竖屏切换时系统不会重新inflate布局,会直接复用当前已渲染的布局,尺寸状态保持完全一致
避坑提示:如果布局中直接写死了固定px值作为宽高/边距,横竖屏切换时系统会把宽高值交换计算,必然出现尺寸差异,所有固定尺寸必须用dp单位或者资源引用。
内容的提问来源于stack exchange,提问作者Tintu
相关产品推荐
相关产品推荐

