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

本文深入探讨Android中px、dp、dpi、density等单位的概念与作用,特别是dp如何帮助开发者解决不同屏幕密度下的UI适配问题,以及通过动态调整density实现屏幕宽高比的适配。

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

px、dp、dpi、density

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

dpi

dpi:就是每英寸包含的像素的多少。为什么是英寸,不是厘米?因为是外国人定义的。

density & dp

为什么会出现density这个参数?

第一代andrid设备的dpi是160

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

用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 * density

所以,在dpi=160的设备上,density=1,1dp = 1px;
在dpi=320的设备上,density=2,1dp = 2px;

这样,使用dp做为单位,就不用担心屏幕当前的dpi到底是多少了

关于屏幕适配

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

例如,现在市面上出现了各种奇奇怪怪的宽高比,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里面就可以完成竖直方向的适配了。

转载于:https://juejin.im/post/5cfcaad3f265da1bc94ee0af

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值