android 屏幕适配解析全过程

注:所有获取屏幕大小和分辨率的代码中,最好在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.  

 ldpimdpihdpixhdpixxhdpi
系统密度120160240320480
代表分辨率240x320320x480480x800720x12801080x1920
基准比例0.7511.523

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值为以下,黄色部分应该不会出现忽略

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值