🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
***** **dp + dimens 适配** [TOC=6] 我们总是在xml布局里写dp,dp到底是什么意思呢? 这是Android开发中特有的一种度量,称作屏幕无关像素,它不表示任何具体的长度或者像素点,这个值只有在具体屏幕密度的手机上,才会被转换为具体的像素值。 它跟px不一样,咱们在xml里面写上px,那无论运行到任何设备上,就是固定的px,不会发生什么变化,但是dp就不一样了。 比如拿以下几种来说明一下。 | 分辨率(px) | 系统密度(dpi) | | --- | --- | | 240x320 | 120 | | 320x480 | 160 | | 480x800 | 240 | | 720x1280 | 320 | | 1080x1920 | 480 | 1dp转换的px是多少呢? 其实就跟dpi有关,而基准线是160dpi,这就意味着1dp在320x480这款手机上就是1px,在480x800是1.5px,720x1280上是2px,1080x1920上是3px。 这就是dp。 比如现在有这么个需求,要求一个控件的宽度占屏幕的一半,我们用dp怎么来实现呢? 首先进行计算,比如320x480,它的宽是320个px,那我们就要写160px,用dp来表示就是160dp。所以我们可以在xml布局里写160dp就可以了,同样的方式试一试其他的手机: 比如240x320,你写160dp在这种手机上转换的px就是 160dp\*120/160 = 120px,所以在这种手机上160dp代表的就是120px,刚好是240的一半,也能适配。 再来试一试480x800,想在这种手机上也占一半,必须是240px,而咱们写的是160dp,它转换的px就是 160dp\*240/160=240px,刚好也能符合需求。 其实Google出dp这个东西本身就能达到适配的概念,你看,咱们写了一个160dp,跑到这几种手机上都能达到需求,这不就是适配了吗? 但是我之所以提出来了,就说明dp并不能保证完美适配,比如咱们试试720x1280。 720的一半是360px,而咱们写的160dp,转换的px是160dp\*320/160=320px,明显就不是一半,差了40px。也就是说咱们的代码运行到这种手机上的时候就没有适配好,没有达到需求。 再试试1080x1920的,同样的计算,160dp\*480/160=480,而1080的一半是540,480跟540差了60px,也不行,没有达到需求。 由此可见,当在240x320,320x480,480x800上面的时候写160dp是正常的,可以满足需求。而在720x1280,1080x1920上面却不能完美适配。 问题抛出来了,该怎么解决这个问题呢? ![](https://box.kancloud.cn/d2e9b0afd51bb71ce8a588ddc99e7833_686x1206.webp)