为什么要进行屏幕适配?Android系统碎片化严重,物理硬件型号多,屏幕大小分辨率不同,适配为了追求更好的用户体验感。
屏幕尺寸信息
1屏幕大小:屏幕对角线的长度,用英寸表示,常用4.7和5.5等
2分辨率:手机屏幕的像素点个数,常用M*N形式表达,即宽有M个像素点,高有N个像素点,主流的分辨率有720*1280、1080*1920、480*800等
3 PPI 每英寸像素,又称DPI,对角线的像素点输除以屏幕大小得到
4 px:像素,在UI设计中、Android的API以px作为计量单位,比如获取屏幕宽高
5 sp 与dp类似,像素无关,设置字体的御用单位,一般推荐设置偶数
系统屏幕密度
Android系统定义若干标准DPI,作为手机固定的DPI,
密度 | ldpi | mdpi | hdpi | xhdpi | xxhdpi |
密度值 | 120 | 160 | 240 | 320 | 480 |
分辨率 | 240*320 | 320*480 | 480*800 | 720*1280 | 1080*1920 |
适配注意点
独立像素密度dp(1dp实际长度1/160inch)
Android中以密度值160作为标准,在mdpi中,1dp=1px,hdpi中,1dp=1.5px,同理可以推出各个分辨率直接换算比例:ldpi:mdpi:hdpi:xhdpi:xxhdpi=0.75:1:1.5:2:3
注意:dp、px、sp之间是可以转化的,具体的转化工具度娘有!!!
总结:dp的存在能让同一数值尺寸在不同分辨率物理设备上显示相同大小(不一定一样大小,但误差可以接受)。那么问题来了?假如手机本身的物理尺寸相差太远,dp就无能为力,就需要新的概念:百分比
其实Android系统中的match_parent和layout_weight就用到百分比的思想。Match_parent占用父容器100%,而layout_weight和wrap_content组合使用,神奇的按比例分配空间。百分比在Android中该怎么用呢?
1确定开发的应用支持哪些分辨率
2选择一个合适分辨率作为基准,如用320*480,把屏幕像素宽和高分别分隔成320和480份。在基准中每一份代表1px,倘若适配480*800,每一份宽表示1.5px(480是320的1.5倍),同理,即可得到项目支持所有分辨率中的高和宽对应px(通过代码生成,代码度娘有)。
3使用,得到UI妹妹的设计图后,根据设计图尺寸,以某一个分辨率机型基础,找到对应的单位,设置即可。
总结:方案不错,适配准确,但必须包含所有的分辨率,若有分辨率缺少,后果严重。并且使用px作为控件长度单位,违背Android设计原则。使用方便,直接导入相应的架包就可以,维护成本高。
关于Android其他屏幕适配注意点:
1、多使用wrap_content和match_parent,它们和屏幕大小、分辨率没有关系。配合layout_weight可灵活按比例分配空间
2、多使用相对布局,禁止绝对布局。相对布局下组件的位置和距离是根据已存在的控件或父控件决定的,屏幕适配性好。
3、使用限定符 App在运行时根据当前设备配置自动选择合适的资源,如根据屏幕尺寸选择相应的布局。res/layout/main.xml这是正常布局,res/layout-large/main.xml,这是在平板大屏幕中使用。同样,在3.2版本中引入的最小宽度限定符一样,rea/layout-sw600dp/main.xml,在屏幕宽度大于等于600dp中采用的布局,当然,除了大小,还有屏幕的方向限定符合,更多参照官方文档
文中部分参考Android群英传和CSDN中Buaaroid大神的博客。有什么错误的地方,欢迎大神拍砖。