注:所有获取屏幕大小和分辨率的代码中,最好在Manifest中加上下面的代码,否则在太小的屏幕上获取到的不正确
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:resizeable="true" android:anyDensity="true"/>
android 官方指出:
屏幕尺寸是系统为您的应用界面所提供的可见空间。 应用的屏幕尺寸并非设备的实际屏幕尺寸,而是综合考虑屏幕方向、系统装饰(如导航栏)和窗口配置更改(例如,当用户启用多窗口模式时)后的尺寸。
像素密度是屏幕单位面积内的像素数,称为 dpi(每英寸的点数)。 它与分辨率不同,后者是屏幕上的总像素数。
1. 屏幕的长宽,用像素表示
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; int height = dm.heightPixels;
2.屏幕的对角线:用英寸表示(1英寸=2.54cm),需要物理测量获取
3. DPI 和 PPI
DPI:原来是印刷上的记量单位,意思是每英寸上,所能印刷的网点数(Dot Per Inch)。
打印分辨率(每英寸所能打印的点数,即打印精度)
android给定的是每英寸上的像素点数,基准时一英寸160.
ldpi mdpi hdpi xhdpi xxhdpi 系统密度 120 160 240 320 480 代表分辨率 240x320 320x480 480x800 720x1280 1080x1920 基准比例 0.75 1 1.5 2 3 PPI:设备斜对角每英寸上的像素数。
图像的采样率(在图像中,每英寸所包含的像素数目),计算过程如下:
斜对角线上的像素数= 长²+宽²再 开平方根
每英寸的像素数 = 斜对角线上的像素数/ 斜对角长单位英寸
DPI 和 PPI 毫无关系,也无法换算。 PPI更为精确是可以计算的,而DPI 是android根据像素和尺寸给定设备的一个分辨率,需要自己去获取
"设备分辨率dpi:" + dm.densityDpi "设备屏幕密度:" + dm.density
4. dp 和 sp
dp和sp是android给定的长度和字体大小的单位,与设备无关的一个单位值;
在不同的分辨率的手机上,可以基本确保1dp 或者 1sp,看起来相同。但有时候也还是有差距的。而且根据设计图的基础尺寸需要单独适配不同的手机,很繁琐。
px = dp/(dpi/160)
dp = px*(dpi/160) 相当于屏幕密度是几,1dp就等于几px
5. 宽高限定符适配法
res/values-480x320 values-800x480 values-854x480
根据设计图的宽高以480x320为基准,y是1-480px; x 是1-320px; 相应的 800x480,y就是 1 = 800/480 , x就是 1 = 480/320,
依次类推,创建出所有的宽高比例一直的资源文件,直接按照设计稿px写就行;
缺点:1. 宽高比例必须一一匹配,没有的则去values中最基准的来找了
2. 如果基准和需要显示的宽高差距太大,图片就会与实物变形严重
所以对于手机的设计稿,平板使用,这种方式就会使图片变形严重
6.sw限定符适配法
当前比较流行的适配方法,今日头条适配就是这个,android官方文档提倡使用这个适配方案适配平板
以屏幕的最小的一边为基准去计算,
如何去计算一个设备的sw呢,
width/(dpi/160.0)
如果设计稿最小边尺寸375,以sw-360dp为基准,那么 1px = 360/375 = 0.96dp, 而sw-370dp中,1px = 370/375 = 0.98dp
res/layout/main_activity.xml
res/layout-sw600dp/main_activity.xml
下面是其他最小宽度值与典型屏幕尺寸的对应关系:
- 320dp:典型手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
- 480dp:约为 5 英寸的大手机屏幕 (480x800 mdpi)。
- 600dp:7 英寸平板电脑 (600x1024 mdpi)。
- 720dp:10 英寸平板电脑(720x1280 mdpi、800x1280 mdpi 等)。
具体的宽高限定符生成的程序 和 sw文件生成程序见:
宽高限定符生成的程序 :https://download.csdn.net/download/yangaiyu/12707571
sw文件生成程序:https://download.csdn.net/download/yangaiyu/12707583
sw需要DimenTypes文件中设置你所序生成的sw宽度
DimenGenerator文件中设置你的设计稿的尺寸
根据统计,需要保留的基本sw值为以下,黄色部分应该不会出现忽略