唠唠屏幕适配中的dp、px、dpi、sp
本小仙女在刚刚做Android开发的时候,画UI都是照猫画虎,依葫芦画瓢,哦~ layout_widht = "@dimen/dp12",巴拉巴拉这么写,重来不考虑其他东西,后来换了家公司以后,UI图给到手,我边上的ios开发小锅锅就跟我说,你直接拿他的px除以2就行了。为什么?不造啊。。。。再后来,边上小哥哥换人了,他会看着UI图气势汹汹的跑到UI妹纸边上跟她讲你这个设计的偏大,这个设计的不合理,然后,我才知道,我胡在这里不懂的知识是要还的,今天,我们就来说说屏幕适配的一些东西。
第一,PX,即Pixel像素,这个最好理解,比如我们的手机是 480*800,意思就是宽有480个像素点,高有800个像素点。这个单位一般UI妹纸会用到。
第二说dpi,dpi的全称是dots per inch,即对角线每英寸的像素点个数,如下图所示
w图中屏幕宽为1080个像素,高是1920个像素,斜对角线4.95英寸。(1920*1920+ 1080*1080)½/4.95≈445dpi。此处我们算出dpi约为445。这里我们要知道的是,dpi越高,分辨率越高。
第三,dp(或者dip),即设备独立像素,也叫做虚拟像素。这个单位一般是我们开发人员用到。
第四,sp,sp在这里不做过多介绍,我们只要知道sp与开发自体有关,一般用12sp以上的就行。
上面介绍了这几个单位的基本概念,接下来我们看看下面这张图
图上,左边是320px*480px的界面,右边是640px*960px的界面,如果UI给我们一个宽160px高100px的按钮放在界面坐上角,那么,在左边这个界面上,按钮的长占界面宽度的一办,而对于640*960的屏幕,按钮只占了一丢丢。这样的话,根据android不同的界面大小,那同一个xml显示在不同手机上,简直不能看。下面继续看图
此时,如果我们把按钮宽160px改成160dp会出现什么样的情况呢,显然,在左右两张图上,按钮都占了界面宽度的一半。这才是我们平时开发中所要的效果。而我们知道,平时UI给我们的图都是px为单位的,我们怎么转换成dp呢,下面,我们来说下dp和px的关系
当当当当,记住上面这张图就好啦。如果UI妹纸的设计图是按照320px*480px设计的,那么标注图是多少px,我们直接写多少dp就好了,因为在此时1dp = 1px。那么如果UI妹纸是按照720px*1280px设计的,那么我们把他所有的px除以2就是我们所要dp的大小。是不是很方便呢?
当然,上面表中的低密度(ldpi)、中密度(mdpi)所代表的分辨率都是比较典型的,Android手机那么多,屏幕比例也不仅仅只有这标准的5种,那么如果我们遇到不按照常理出牌的手机屏幕咋办么?
Google官方指定的dpi区分标准上图为Google官方指定的dpi区分图。有了每个密度范围,是不是啥都不用愁了哈哈。
说到这里,大家是不是也想起了UI妹纸切图的时候会切1倍图、1.5倍图、2倍图、3倍图。为啥同一张图片要切不同的好几套呢。是不是豁然开朗茅塞顿开。为了保证不同分辨率不同大小的手机屏幕显示出来的图片感觉一样,高分辨率的手机图片是不是要大一点清晰一点,否则如果拿一张图适应不同分辨率手机,是不是因为图片拉大缩小而导致失帧呢。
好了,今天的屏幕适配知识就讲到这里了。如果有说的不对的,欢迎大家前来指正。