Android手机,众所周知的碎片化,市面上的手机的分辨率估计都有好几千种.......(无奈).......那么身为Android开发人员的我们,应该怎样去对不同的手机的分辨率进行适配,从而可以让UI元素在不同的手机上面得到较为一致的显示呢?
首先转载一篇关于Ui适配的文章:AndroidUI适配.
看了上面的这篇文章后,我们思考一个问题
我们平时在编写 UI 元素的时候一般都是直接以 dp 作为单位,原因相信做安卓的人都知道. 那么问题来了, 我们先看一张图:
在Android中,以 160dpi 也就是 mdpi 为标准 dpi, 在该 dpi 下, 1px=1dp, 其它dpi 下进行相应的换算即可.
接下来我们来说一种情况, 我们编写了一个控件的宽为 10dp, 然后我们在标准的 1080 的屏幕下运行应该是会显示 30px ,
但是有一种情况, 某些分辨率为 1080 的手机的 dpi 值却不为 480dpi(如Google 的Pixel 2的 dpi 为 420(真他娘的坑)), 那么会造成什么影响呢?
想想都知道,, 我们编写的 10dp 宽度在两台分辨率同样为 1080 的手机上面显示的大小却不一样(如google 的pixel 2 只会显示 26px), 你说坑不坑!!!!
这个时候我们便要进行UI适配, 我这里说一下最后一种情况,也是最优的适配方案,首先适配的思路是:
我们能不能让系统去检测当前手机的 dpi, 然后根据不同的 dpi 选择不同的 dp 值大小呢? 比如我们在 1080 的屏幕下都要显示 30px 大小, 在 dpi 高的屏幕下,让系统去选择 一个较小的 dp, 然后在 dpi 较低的屏幕下让系统去选择一个较大的 dp ,从而实现在相同分辨率而 dpi 值不同的屏幕下能够正常显示.
说了上面的思路,我说一下转载的博客中最后一种适配方式的含义,也就是所说的这种思路.
首先, 我们根据手机的分辨率和手机的 dpi 值计算出手机宽度的 dp 值, 然后相同分辨率的手机会因为不同的 dpi 而计算到不同的 dp 宽度值,然后我们在不同的 dp 宽度值的目录下放置不同的 dp 宽度资源文件, 然后系统会根据手机屏幕宽度的 dp 值去不同的文件夹下寻找相应的 dp 资源, 从而实现了我们刚开始所说的那种思路, 即 在同样的分辨率的手机中 因为不同的 dpi 而动态采用不同的 dp 资源实现了控件在 相同的分辨率而 dpi 值不同的屏幕下都能得到较为一致的显示. 写的不好,可能有点晕....