1. Android屏幕中的若干概念:
概念 | 意义 | 单位 | 备注 | |
屏幕尺寸 | 屏幕对角线的长度 | inch |
| |
屏幕分辨率 | 屏幕横纵向上的像素点数 | px | 1920*1080 获取屏幕的width和height | |
屏幕像素密度 (dot per inch) | 每英寸上面的像素点数 | dpi | 计算方法为对角线上的像素点数/屏幕尺寸 px/inch(1:1.5:2:3:4) | |
Mdpi(48*48px) | 120~160 | |||
hdpi | 160~240 | |||
xhdpi | 240~320 | |||
xxhdpi | 320~480 | |||
xxxhdpi | 480~640 | |||
密度无关像素 Density Independent Pixels | 这个View在任何分辨率的屏幕中,显示的尺寸大小是大约是一致的 | dp/dip | px = dp * (dpi / 160) 以160dpi为基准,1dip=1px 在实际使用中1dp大约等于1/160inch | |
Scale Independent Pixels | 根据文字大小首选项进行放缩 | sp | 设置文字大小 12sp以上大小 12,14,18,22sp(首选大小)不要使用奇数、小数 |
2. 屏幕适配主要解决的三个问题:
l 支持各种屏幕尺寸
Ø 使用wrap_content,match_parent, weight
注意:weight的计算方法(以宽度为例)
计算出来的宽度
= 原有宽度 + 剩余空间(原有空间 – 所有控件占用的空间) * 所占百分比
Ø 使用相对布局
Ø 使用限定符
1. android3.2 之前:使用尺寸限定符(large,手机尺寸大于7inch)
2. android3.2 之后:使用最小宽度限定符(layout-sw600dp)
3. 布局别名:
方法意义:把相同的布局文件抽取出来,进行统一管理。
假设情景:同时兼容手机和平板设备,以及同时兼容android3.2前后的设备。
实现方法:res下面的value文件中进行配置。
4. 方向限定符:
假设情景:平板的放置方向不一样。
Ø 使用自动拉伸动图(.9图)
l 支持各种屏幕密度
Ø 使用非密度制约单位(sp、dp)
dp:能解决因为屏幕像素密度引起的差距,不能解决因为物理尺寸引起的差异
百分比 :web中支持控件的宽度可以去参考父控件的宽度去设置百分比,最外层控件的宽度参考屏幕尺寸设置百分比,那么其实中Android设备中,只需要支持控件能够参考屏幕的百分比去计算宽高就足够了。
解决方案:就是在项目中针对你所需要适配的手机屏幕的分辨率各自简历一个文件夹,必须为每种设备提供资源文件
Goole已经提供了关于利用百分比配置屏幕的库:https://github.com/JulienGenoud/android-percent-support-lib-sample
Ø 提供备用位图
只需要将不同分辨率的手机对应的图片放在对应的drawable文件当中即可。
Mdpi(48*48px) | 120~160 |
Hdpi(72*72px) | 160~240 |
xhdpi(96*96px) | 240~320 |
xxhdpi(144*144px) | 320~480 |
xxxhdpi(192*192px) | 480~640 |
如果不放在对应的文件中,例如放在默认的drawable文件中,那么在高分辨率的手机设备上运行时,会将默认drawable文件中的图片进行拉伸以后再引用图片,造成极大的内存浪费。例如将图片拉伸2倍,内存消耗会为4倍。
l 实施自适应用户界面流程(适配手机和平板)
主要参考资料:
1. 慕课网:Android-屏幕适配全攻略