一、Android中dpi,dp,dip,px.sp等各种单位详解
屏幕尺寸:(inch)手机屏幕对角线的长度,单位是英寸,1英寸=2.54厘米。
屏幕分辨率:(px 1px=1个像素点 )屏幕分辨率指的是屏幕横纵方向的像素点的数量,一般以纵向像素*横向像素,比如1920*1080。
屏幕像素密度:(dpi)每英寸上的像素点,像素密度与屏幕尺寸和屏幕分辨率有关
一部手机的分辨率是宽x高,屏幕大小是以寸为单位,那么三者的关系是:
假如分辨率是1920*1080 屏幕的尺寸是:5.0 dip=(√1920*1920+1080*1080)/5.0 =445 √代表开根号
px:构成图像的最小单位
dp,dip:density independent pixels的缩写,即密度无关像素,以160dpi为基准,1dip=1px
谷歌为我们提供的标准:
1:分辨率是120*240,像素密度是120dpi 1dip=1dp=0.75px 0.75倍图 图片可以放在mipmap—ldpi下
2:分辨率是320*480,像素密度是160dpi 1dip=1dp=1px 1倍图 图片可以放在mipmap—hdpi下
3:分辨率是480*800,像素密度是240dpi 1dip=1dp=1.5px 1.5倍图 图片可以放在mipmap—mdpi下
4:分辨率是720*1080,像素密度是320dpi 1dip=1dp=2px 2倍图 图片可以放在mipmap—xhdpi下
5:分辨率是1080*1920,像素密度是480dpi 1dip=1dp=3px 3倍图 图片可以放在mipmap—xxhdpi下
sp:可以根据文字大小首选项进行放缩,Google推荐尽量使用12sp以上的单位,不然可能会让用户看不清楚,推荐使用12sp,14sp,18sp,22sp,尽量不要使用奇数和小数,因为放缩的时候可能造成精度丢失
屏幕适配的目的:让app在不同的屏幕上展示相同的效果,谷歌提供了dp适配,由于android厂商生产屏幕碎片化严重,dp适配无法满足我们的需求,所以需要进行屏幕适配
二、基础适配
- 布局适配:尽量使用线性,禁止使用绝对、尽量使用match-parent,wrap-content
- 套图适配:针对不同手机,进行不同的套图适配,完美适配,app臃肿,不易实现
三、屏幕适配框架AutoLayout
原理:就是把你不想做的px和dp换算过程交给这个轮子来计算(原理这东西都是简单的跟一加一等于三一样)
目的:拿到UI设计图,在处理对应的布局文件时,之间按照UI效果图上标注的px尺寸写进xml文件中,通过Autolayout自动达到多屏幕的适配
用法:
1、引入架包:一种下载Autolayout的开源库,或者在gradle中
dependencies {
compile project(':autolayout')
}
其代码结构如下:
自动适配了FrameLayout、LinearLayout、RelativeLayout等常用容器。
在你的项目的AndroidManifest中注明你的设计稿的尺寸。

2、对应的Antivity继承AutoLayoutActivity,就ok了
如果继承AutoLayoutActivity来使用,那么你就得像Google的百分比库一样,去用AutoXXXLayout代替系统原有的XXXLayout。当然,你可以放心的是,所有的系统属性原有的属性都会支持,不过根布局上就不支持px的自动百分比化了,但是一般根布局都是MATCH_PARENT,而上述的方式,根布局也是可以直接px的百分比化的。
3、需要注意:
对于listview中getview中的view,因为没有继承AutoLayoutActivity,所以没有办法自动进行适配,所以可以借助其:AutoUtils.autoSize(convertView);方法,来完成适配。
而且目前已经停止维护了
最详细的讲解:http://blog.youkuaiyun.com/lmj623565791/article/details/49990941
四、今日头条提供的低成本的屏幕适配
定义基准宽度,根据手机宽分辨率动态改变屏幕密度,达到适配效果
今日头条的特别提供https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA
五、其他
百分比布局:以某一分辨率为基准,生成所有分辨率对应像素数列表
最小宽度:最小宽度是不考虑横屏或竖屏的,也就是说最小宽度是设备屏幕四条边里最短的那两条边。如果需要考虑横竖屏那么可以加入屏幕方向限定符(最小宽度为sw,其他自己查),通过得到最小宽度
2375

被折叠的 条评论
为什么被折叠?



