1.dp与px的
密度类型 | 代表的分辨率 | 屏幕密度 | 换算 | 比例 |
低密度(ldpi) | 240x320 | 120 | 1dp=0.75px | 3 |
中密度(mdpi) | 320x480 | 160 | 1dp = 1px | 4 |
高密度(hdpi) | 480x800 | 240 | 1dp = 1.5px | 6 |
超高密度(xhdpi) | 720x1280 | 320 | 1dp = 2px | 8 |
超超高密度(xxhdpi) | 1080x1920 | 480 | 1dp = 3px | 14 |
在Android中,规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px,一般是以xhdpi较多,即1dp = 2px;
2.图标的各个屏幕密度的对应尺寸
屏幕密度 | 图标大小 |
mdpi | 48x48px |
hdpi | 72x71px |
xhdpi | 96x96px |
xxhdpi | 144x144px |
xxxhdpi | 192x192px |
3.布局适配:
①layout-large命名布局文件,只适用于3.2之前版本;
②使用了layout-sw 600dp的最小宽度限定符,即无论是宽度还是高度,只要大于600dp,就采用layout-sw 600dp目录下的布局;
③如果适配3.2之前的和3.2之后的版本,因为布局一样,只是名字不一样,所以用@layout/main_twopanes,就避免了重复定义布局文件的情况
④values-sw600dp-land (大屏、横向、双面板、宽-Andorid 3.2版本后)、res/values-sw600dp-port/layouts.xml(大屏、纵向、单面板带操作栏-Andorid 3.2版本后)
⑤通过使用"wrap_content"、"match_parent"和"weight"来替代硬编码的方式定义视图大小&位置
4.图片资源
①必须要使用.9.png后缀名,因为系统就是根据这个来区别nine-patch图片和普通的PNG图片的;
②如果我们为 xhdpi 设备生成了 200x200 px尺寸的图片,就应该按照相应比例地为 hdpi、mdpi 和 ldpi 设备分别生成 150x150、100x100 和 75x75 尺寸的图片
③如果增加其他的资源会更APK体积变大,就只采用xhdpi的图片资源;
5.界面流程匹配
- 确定当前布局
- 根据当前布局做出响应
- 重复使用其他活动中的片段
- 处理屏幕配置变化
6.Android 加载资源过程
SDK检测到你手机的分辨率是320x480(dpi=160),会优先到drawable-mdpi文件夹下找对应的图片资源;但假设你只在xhpdi文件夹下有对应的图片资源文件(mdpi文件夹是空的),那么SDK会去xhpdi文件夹找到相应的图片资源文件,然后将原有大像素的图片自动缩放成小像素的图片,于是大像素的图片照样可以在小像素分辨率的手机上正常显示
参考:
- Google的官方权威适配文档
- 郭霖: Android官方提供的支持不同屏幕大小的全部方法
- Stormzhang:Android 屏幕适配
- 鸿洋:Android 屏幕适配方案
- 凯子: Android屏幕适配全攻略(最权威的官方适配指导)
- Carson_Ho: Android 屏幕适配:最全面的解决方案