屏幕适配

前言

dp 能够让同一数值在不同的分辨率展示出大致相同的尺寸大小。但是当设备的尺寸差异较大的时候,就无能为力了。适配的问题还需要我们自己去做。

常见手机屏幕像素及对应分辨率级别

|密度类型 |代表的分辨率(px)| 屏幕像素密度(dpi) |换算关系 |比例|
| ------------- |:-------------:| -----:|
|低密度(ldpi)| 240320 |120 |1dp=0.75px|3|
|中密度(mdpi)| 320
480 |160| 1dp=1.0px| 4
|高密度(hdpi) |480800| 240 |1dp=1.5px |6
|超高密度(xhdpi) |720
1280| 320| 1dp=2.0px| 8
|超超高密度(xxhdpi) |1080*1920| 480| 1dp=3.0px |12|

适配的tips:

  • 多用match_parent
  • 在LinearLayout 中多用weight,在RelativeLayout多用位置关系
  • 自定义view解决
  • 尽量不要给控件的宽高写死
  • 使用Size限定符,在不同条件下加载不同的布局
  • 使用Smallest-width限定符

使用Size限定符有一个问题会让很多程序员感到头疼,large到底是指多大呢?很多应用程序都希望能够更自由地为不同屏幕设备加载不同的布局,不管它们是不是被系统认定为"large"。这就是Android为什么在3.2以后引入了"Smallest-width"限定符。
Smallest-width限定符允许你设定一个具体的最小值(以dp为单位)来指定屏幕。例如,7寸的平板最小宽度是600dp,所以如果你想让你的UI在这种屏幕上显示two pane,在更小的屏幕上显示single pane,你可以使用sw600dp来表示你想在600dp以上宽度的屏幕上使用two pane模式。

  • 使用布局别名
    Smallest-width限定符仅在Android 3.2及之后的系统中有效。因而,你也需要同时使用Size限定符(small, normal, large和xlarge)来兼容更早的系统。例如,你想手机上显示single-pane界面,而在7寸平板和更大屏的设备上显示multi-pane界面.
  • 使用Orientation限定符
    有些布局会在横屏和竖屏的情况下都显示的很好,但是多数情况下这些布局都可以再调整的。比如横竖的布局不一样。

res/values-sw600dp-land/layouts.xml:
res/values-sw600dp-port/layouts.xml:

  • 使用Nine-Patch图片
    支持不同屏幕大小通常情况下也意味着,你的图片资源也需要有自适应的能力

参考资料

  • Android开发:最全面、最易懂的Android屏幕适配解决方案
  1. 郭霖的 Android官方提供的支持不同屏幕大小的全部方法
  • HongYang Android 屏幕适配方案

你可能感兴趣的:(屏幕适配)