通过勾股定理先算出对角线的像素,再除以屏幕尺寸,结果约等于470dpi,现在再回头看我刚才为什么要选1080*1920 - 480dpi呢?显而易见就是为了选一个约等于4.7英寸屏幕的设备,这样才方便和同是4.7英寸的Nexus进行比较,同理再计算一下Nexus 4的屏幕像素密度:
y=12802+7682−−−−−−−−−−√4.7
得到的结果是317.6,和设备参数中的320dpi基本一致:
现在再结合像素密度的概念想一下,我们在上面写的android程序中,之所以高分辨率的HTC中的TextView占屏比较小,正是因为它的像素密度大,所以固定的500*500px尺寸的TextView在它的屏幕里面就显得占的地方小,而Nexus 4的像素密度小,所以500*500px这个像素对于它来说占的地方就会更大。最后总结一句话就是:屏幕尺寸相同的情况下,分辨率越高,像素密度就越大。
再看下面这张图应该就彻底清楚了它们的换算关系:
到这里这三个概念就算介绍完毕了,虽然本篇blog的重点不是介绍android中的单位,但说到这里,不得不提几个相关的单位,例如:dp、sp、dip等等。
android中的单位如题,依次来看看google为android引入的单位:
dp:又称dip(ios中叫ppi),density independent pixels,即密度独立像素,它和px有一个根据dpi按比例的换算关系,是一个android标准,即:以160dpi为基准,1dp=1px。结合上一小节的内容再想想,用dp做单位的话就不会再出现上面的窘境,因为分辨率不同,dpi也就不同,那么换算的px也就不一样了,这样即使在不同分辨率的设备上也可以让控件看起来一样。
sp:与dp用法类似,只不过是android中专门用来定义文字大小的单位,即所有的fontSize都应用sp来度量。
android中主要就用到上面这两种单位,还有一点值得提一下就是做过android开发的话都知道在项目工程中有这样的目录: