设备兼容性-支持不同的屏幕尺寸

541 阅读2分钟

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()))