对Android中各个尺寸和屏幕适配的理解

Android中的尺寸为何有这么多参数?

px、dp、dpi、densityandroid

px 就不解释了,下面解释下其余参数post

dpi

图片来源 头条

dpi:就是每英寸包含的像素的多少。为何是英寸,不是厘米?由于是外国人定义的。设计

density & dp

为何会出现density这个参数?

第一代andrid设备的dpi是160 cdn

可是随着高分辨率的屏幕出现,每英寸中包含的像素远远不止160个,出现了240,320等屏幕。
为了兼容这些高分辨率的屏幕,因而定义了density 和dp 这两个参数。blog

用dpi=320举例
以第一代android设备的dpi为标准,density = 1
在dpi=320的设备上,density=2,即 density= 当前设备的dpi / 160(第一代android设备的dpi)图片

density有啥用?

单独的density 好像没啥用,就是一个当前设别和第一代android设备dpi的比值。
因此,还有一个参数dp
dp,dp是android中与屏幕密度无关的单位,使用dp能够不用关心当前设备的dpi究竟是多少。
为何dp有这种功能?看看dp的定义: dp = px * densityget

因此,在dpi=160的设备上,density=1,1dp = 1px;
在dpi=320的设备上,density=2,1dp = 2px;it

这样,使用dp作为单位,就不用担忧屏幕当前的dpi究竟是多少了io

关于屏幕适配

使用density+dp这种方式很好的解决的dpi不一致,没法统一使用px去绘制各类UI的问题。可是却没有解决 UI设计图和真实显示不一致的问题。class

例如,如今市面上出现了各类奇奇怪怪的宽高比,16:9,4:3,22:19,23:19等等等等。
这些各类的宽高将会致使这样的问题:
公司的UI基于480dp x 360dp 这样的宽高的设计了交互图,是4:3 。
可是若是遇到了 640dp x 360dp 这种16:9的分辨率,就有问题了,很明显,原来设计图的高度为480dp,在4:3的手机上能够铺满,在16:9的机子上就铺不满了。因此须要屏幕适配。

如何适配

通常来讲,屏幕适配只能适配一个方向,竖直方向或者水平方向。 适配的方法有不少,介绍一种我比较喜欢的方法:今日头条适配方法。juejin.im/post/5b7faf…

这种方案是经过动态修改density来实现的,简单介绍一下。

例子 :设计图 480dp x 360dp
适配方向:竖直适配,使得 480dp的显示效果为任意屏幕高度。

假设屏幕高度为 h ,存在一个density 使得 480dp * density = h , density = h / 480。咱们只要把这个density设置到Resource的DisplayMetrics里面就能够完成竖直方向的适配了。

相关文章
相关标签/搜索