性能优化

【适配】Android适配基础

2018-09-11  本文已影响12人  dlihasa

简单说下各相关单位的含义

屏幕尺寸:手机屏幕对角线的物理尺寸,1英寸=2.54cm,Android手机常见的尺寸5寸、5.5寸、6寸等。
分辨率:手机屏幕宽和高方向上的像素点,通常称为宽x高,比如1080x1920分辨率的手机
px:像素,屏幕上的物理像素点。
dip:density-independent pixel,也可以写成dp,与终端上的实际物理像素点无关。
sp:scale-independent pixel,独立比例像素,用于描述字体。
dpi:dots per inch,每英寸的像素点数。
density:在代码中是与标准密度(dpi=160)的一个比值。

相关的更多介绍请看这里

Android的尺寸属性

首先看一段代码和输出来直观了解一下android中DisplayMetrics中的各个属性以及在随机找的两个不同机型上的取值:

 DisplayMetrics dm = getResources().getDisplayMetrics();
 Log.d("dm", "densityDpi: "+dm.densityDpi);
 Log.d("dm", "density: "+dm.density);
 Log.d("dm", "scaledDensity: "+dm.scaledDensity);
 Log.d("dm", "widthPixels: "+dm.widthPixels);
 Log.d("dm", "heightPixels: "+dm.heightPixels);

某三星机的各项属性输出:


image.png

某小米机输出:


image.png

Android中的dp在渲染前会将dp转为px,计算公式:

px = density * dp;
density = dpi / 160;
px = dp * (dpi / 160);
而dpi是根据屏幕真实的分辨率和尺寸来计算的,每个设备都可能不一样的。

我理解的是如果ui出图和手机屏幕都是按照标准来的话,dp是可以解决这种屏幕适配的问题,但是这只能是一种美好的希望。。。然而事实是:

假设我们UI设计图是按屏幕宽度为360dp来设计的,那么在上述设备上,屏幕宽度其实为1080/(440/160)=392.7dp,也就是屏幕是比设计图要宽的。这种情况下, 即使使用dp也是无法在不同设备上显示为同样效果的。 同时还存在部分设备屏幕宽度不足360dp,这时就会导致按360dp宽度来开发实际显示不全的情况。而且上述屏幕尺寸、分辨率和像素密度的关系,很多设备并没有按此规则来实现, 因此dpi的值非常乱,没有规律可循,从而导致使用dp适配效果差强人意。

直接上原文了:(这是一种ui设计用dp为单位进行适配的方式)
今日头条团队的一种极低成本的Android屏幕适配方式
根据今日头条的扩展Android屏幕适配很麻烦吗?不!太简单了。。。(持续更新)
这个是上面的转载版本:https://blog.csdn.net/xinlangren88/article/details/80851831
同样是基于今日头条,号称不用写一行代码:https://www.jianshu.com/p/21eadaf65207

然后这里给出了大家认为比较好的两种适配,其中一种是头条的完善版

上一篇下一篇

猜你喜欢

热点阅读