版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
版权
android专栏收录该内容
62 篇文章0 订阅
订阅专栏
一、关于px、dpi、dp的概念
1、px:px表示手机的像素,通常我们所说的手机分辨率1920x1080,实际上指的就是手机高有1920个像素,宽有1080个像素。
2、dpi:dpi即像素密度(Dots Per Inch),表示每英寸(1英寸=2.54cm)内有多少个像素。手机画面是否清晰就是由dpi决定的,这里以分辨率为1920x1080的手机为例,如果手机是5英寸的,那手机画面自然清晰,如果手机是100英寸的呢,那此时你看到的应该是一个个的各种颜色的方格了。
关于dpi和px的关系用公式表示可以写成:dpi = px/inch (inch表示英寸),假设有一部手机,屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度。来个一目了然的图吧:
3、dp:当手机每英寸内有160个像素时,1dp=1px。我们以160dpi为基准,那么在240dpi的手机上,1dp = 240/160 = 1.5px。于是我们可以得出:dp = dpi/160
二、适配原理:
我们先声明多套包含dimens.xml文件的values-swdp 文件夹,在不同设备上运行时,app会根据设备的最小宽度(Smallest-width)来找对应的values-swdp 文件夹,如果系统根据当前设备屏幕的最小宽度没找到对应的 values-swdp 文件夹,则会去寻找与其最小宽度最相近且小于或等于当前设备最小宽度的 values-swdp 文件夹。
关于最小宽度这里说明一下:最小宽度是不区分方向的,即无论是宽度还是高度,哪一边小就认为哪一边是最小宽度。所以如果当前设备最小宽度(以dp 为单位)为400dp,那么系统会自动找到对应的values-sw400dp文件夹下的dimens.xml文件。
获取最小宽度代码:
//获取手机最小宽度