1、如果需要创建自适应布局,应该用什么?
ConstraintLayout
2、嵌套的 LinearLayout 中使用权重 有什么问题?
使用权重要求系统执行多次布局遍历来获取控件的尺寸,这会降低界面的性能。
推荐使用ConstraintLayout。
3、如何创建备用布局?
4、最小宽度限定符怎么表示?
layout-sw600dp
5、最小宽度限定符的值与屏幕尺寸的对应关系如下?
320dp -> 典型
480dp -> 约为5英寸的大手机屏幕
600dp -> 对应着7英寸的平板电脑
720dp -> 对应着10英寸的平板电脑
6、可用宽度限定符怎么表示?
layout-w600dp
7、可用宽度限定符 w600dp VS 最小宽度限定符 sw600dp,之间的区别是什么?
(1)假设有3个布局 layout、layout-sw320dp、layout-sw480dp
手机竖屏安装,那么显示的是layout-sw320dp的布局。
此时我旋转屏幕,为横屏,或者设置屏幕方向 android:screenOrientation="landscape"
依然会使用layout-sw320dp 里面的布局。
说明:最小宽度限定符并不会根据屏幕方向的影响。
(2)假设有3个布局 layout、layout-w320dp、layout-w480dp
手机竖屏安装,那么显示的是layout-w320dp的布局。
此时我旋转屏幕为横屏,或者设置屏幕方向为android:screenOrientation="landscape"
此时会使用 layout-w480dp中的布局。
说明:可用宽度限定符会根据屏幕的方向,设置宽度是什么,进而选择不同布局。
扩展:如果公司想做一个适配,如果在竖屏的时候显示A布局,如果在横屏的时候,显示B布局,应该用哪一种修饰符?
应该用可用宽度限定符,会根据屏幕的方向动态的设置。
最小宽度计算
val metric = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(metric)
// 屏幕密度DPI(120 / 160 / 240)
val dpi = metric.densityDpi
// 屏幕宽度(像素)
val width = metric.widthPixels
val height = metric.heightPixels;
val value = min(width, height)
Log.e("cdx", (((value * 160) / dpi).toString()))