平板端TextView及控件显示过小,需手动修改多布局尺寸吗?
先直接给你结论:完全不需要手动修改每个 layout-swXXXdp 布局里的控件尺寸,你遇到的Nexus9控件过小问题,根源是没采用自适应的布局策略,下面分享几个高效的适配方案:
优先用相对/弹性布局替代固定尺寸
别给控件写死固定dp值(比如android:width="100dp"),改用wrap_content、match_parent,或者借助LinearLayout的layout_weight分配空间。比如把按钮宽度设为match_parent,或者让多个按钮按比例瓜分父布局宽度,这样在Nexus9这类大尺寸屏幕上,控件会自动填充对应空间,不会显得局促。另外用RelativeLayout的相对定位(比如layout_toRightOf、layout_centerInParent),也能让控件在不同屏幕上保持合理位置。用ConstraintLayout实现百分比/约束适配
ConstraintLayout是官方推荐的适配利器,一套布局就能搞定绝大多数屏幕尺寸。它支持百分比宽高、链式布局等特性,举个实际例子:<Button android:id="@+id/my_button" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintWidth_percent="0.6" />上面的按钮宽度会占父布局的60%,不管是Nexus5还是Nexus9,都会按比例缩放,完全不用单独做sw720dp的布局。
通过dimens.xml实现多维度尺寸适配
如果你已经有不同swXXXdp的资源文件夹,不用修改布局文件,只需要维护各维度下的dimens.xml就行:- 在
values/dimens.xml里定义基础尺寸:<dimen name="button_width">120dp</dimen> - 在
values-sw720dp/dimens.xml里定义平板适配尺寸:<dimen name="button_width">200dp</dimen> - 布局里直接引用
@dimen/button_width,系统会自动根据当前屏幕的sw值加载对应的尺寸,不用逐个修改布局控件,只需要维护不同维度的dimens文件。
- 在
统一用dp/sp作为单位
所有控件尺寸用dp,文字大小用sp(sp会跟随系统字体大小调整),绝对别用px——px是固定像素值,在高分辨率大尺寸屏幕上必然会显得极小。
总结一下:你不需要为每个sw尺寸都修改布局,用上面任意一种方案都能实现动态适配,解决Nexus9上控件过小的问题。如果已经做了layout-sw720dp,也可以结合dimens.xml优化,不用重构所有布局。
内容的提问来源于stack exchange,提问作者StuartDTO

