当前位置: 代码迷 >> 综合 >> android 屏幕适配解析全过程
  详细解决方案

android 屏幕适配解析全过程

热度:99   发布时间:2024-02-10 03:30:27.0

注:所有获取屏幕大小和分辨率的代码中,最好在Manifest中加上下面的代码,否则在太小的屏幕上获取到的不正确

<supports-screensandroid: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文件生成程序见:

 

 

  相关解决方案