当前位置:首页 » 安卓系统 » android的屏幕密度

android的屏幕密度

发布时间: 2023-01-11 22:16:40

1. android density是什么意思

Android屏幕密度(Density)和分辨率概念
density值表示每英寸有多少个显示点,与分辨率是两个概念。
不同density下屏幕分辨率信息:
480*800的WVGA(density=240)
density=120时 屏幕实际分辨率为240*400 (两个点对应一个分辨率)

横屏是屏幕宽度400px 或者800dip,工作区域高度211px或者480dip
竖屏时屏幕宽度240px或者480dip,工作区域高度381px或者775dip
density=160时 屏幕实际分辨率为320px*533px (3个点对应两个分辨率)
状态栏和标题栏高个25px或者25dip
横屏是屏幕宽度533px 或者800dip,工作区域高度295px或者480dip
竖屏时屏幕宽度320px或者480dip,工作区域高度508px或者775dip

density=240时 屏幕实际分辨率为480px*800px (一个点对于一个分辨率)
状态栏和标题栏高个38px或者25dip
横屏是屏幕宽度800px 或者800dip,工作区域高度442px或者480dip
竖屏时屏幕宽度480px或者480dip,工作区域高度762px或者775dip

2. 在 android 中,在屏幕密度为160时,1pt 大概等于多少sp

在 Android 中, 1pt 大概等于 2.22sp以上供参考,
与分辨率无关的度量单位可以解决这一问题。Android支持下列所有单位。
px(像素):屏幕上的点。
in(英寸):长度单位。
mm(毫米):长度单位。
pt(磅):1/72英寸。
dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。
dip:与dp相同,多用于android/ophone示例中。
sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。
分辨率:整个屏是多少点,比如800x480,它是对于软件来说的显示单位,以px为单位的点。 density(密度)值表示每英寸有多少个显示点,与分辨率是两个概念。apk的资源包中,

当屏幕density=240时使用hdpi标签的资源
当屏幕density=160时,使用mdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源。
一般android设置长度和宽度多用dip,设置字体大小多用sp. 在屏幕密度为160,1dp=1px=1dip, 1pt = 160/72 sp 1pt = 1/72 英寸.当屏幕密度为240时,1dp=1dip=1.5px.

3. Android 关于"尺寸"的那些事(dp,dip,sp,pt,px...)

屏幕大小:屏幕大小是手机对角线的物理尺寸,以英寸inch为单位。比如我的Mix 2手机屏幕大小为5.99 inches,意味着我的屏幕对角线长度为5.99inches = 5.99 * 2.54 = 15.2146cm

分辨率:屏幕的像素点数,一般表示为a*b。例如某手机分辨率为21601080,意味着手机屏幕的竖直方向(长)有2160个像素点,水平方向(宽)有1080个像素点。

px :Pixels ,像素;对应屏幕上的实际像素,是画面中最小的点(单位色块),像素大小没有固定长度值,不同设备上1个单位像素色块大小不同。

这么说可能有点陌生,用屏幕分辨率来说,今年流行起来的“全面屏”分辨率是 2160*1080,但是你也可以发现,虽然很多全面屏手机分辨率一样,但是明显看得出来屏幕大小不一样,这也解释了“不同设备像素色块大小是不同的”。

pt :1pt=1/72 inch,用于印刷业,非常简单易用;

dpi :Dots Per Inch,每英寸点数;详见ppi

ppi :Pixels Per Inch,每英寸像素数;数值越大显示越细腻。计算式:ppi = 屏幕对角线像素数 / 屏幕对角线长度。

还是举全面屏的例子,分辨率2160*1080,屏幕大小是5.9inches,勾股定理可以得到对角线像素数大约是2415,那么ppi = 2415 / 5.99 = 403.

事实上dpi 和 ppi 一定程度上可以划等号,都表示像素密度,计算方式完全一致,只不过使用场景不一样。dpi中的dots点属于打印或印刷等领域,例如drawable 文件对应的就是dpi,而ppi中的pixel属于屏幕显示等领域

dp/dip : Density-independent Pixels,密度无关像素 - 基于屏幕物理密度的抽象单位。1dp等于 160 dpi 屏幕上的dpx,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单:px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。

如果看完文章还是觉得很懵,那么可以直接记住: 1dp单位在设备屏幕上总是等于1/160 inch。

sp :Scale-independent Pixels ,与 dp 单位相似,也会根据用户的字体大小偏好进行缩放。

首先我们放上源码中对尺寸单位的转换

可以看到,输入值类型为dp时,返回 value * DisplayMetrics.density,到这里我们可能会发懵:嗯?不对啊,前面我们不是通过px 和 dp 的换算公式来计算的么,怎么这里就简简单单乘了一个DisplayMetrics.density?不要慌,我们先看看源码中对DisplayMetrics.density的介绍。

源码注释中说到“在160dpi的屏幕下,density的值为1,而在120dpi的屏幕下,density的值为0.75”,我们可以大胆的猜测一下,120dpi下的density=0.75的原因是120dpi * 1 /160dpi=0.75。实际上,也就是这么回事。我们下面会仔细的分析。

需要补充一下,通常意义上Android 屏幕的密度,指的是像素密度dpi/ppi,对应于源码中的DisplayMetrics.densityDpi。

为什么引入dp?

Android 引入了dp这一单位,使得不论多大屏幕,多大dpi,显示的效果始终保持一致。

但是根据前面我们提到的px与dp的换算公式px = dp * (dpi / 160),很显然,由于相同分辨率但不同屏幕大小的设备dpi是不同的,导致px和dp的基本不存在一个固定的换算关系,为了方便屏幕适配,Android设置了6个通用的密度,换算px与dp时采取通用密度计算,而非设备实际的密度。

以下为6种通用密度,以及其最小的分辨率

得到上面通用密度之后,我们换算dp与px多了一种简便方式。前面我们提到Android将mdpi作为基准,此时1px = 1dp,又有px = dp * (dpi / 160),所以我们可以很容易的得到以下换算:

还记不记得前面源码中的density属性,实际上DisplayMetrics.density = dpi / 160 ,表示的就是在某个通用密度下dp与px的换算比(1dp/1px的值)

这部分其实和程序员自身已经关系不大了,毕竟参与工作之后这些都是UI人员的活儿了。不过鉴于现在我还只是一枚在校生,还是记下来以免自己遗漏吧。

建议在xhdpi中作图

原因嘛,首先现在主流分辨率是1080p,以及最近流行起来的全面屏18:9,而xhdpi对应720p,向低dpi兼容自然没问题,即便在xxhdpi中显示,也会有个不错的效果。而如果以1920*1080作图,显然图片素材占用的内存很大,而且也会增大应用安装包的大小。

只有一个原则:资源放入对应dpi的文件夹中,Android会机智的加载合适的资源。

以drawable资源为例:

我们平时开发小项目&对UI要求不高时,只使用一套xhdpi的资源就足够了,虽然这可能会导致在hdpi及以下的手机中有些卡顿,因为xhdpi的图片运行在hdpi及以下的手机上会比较吃内存,不过无伤大雅。

而如果不为图片资源犯愁时(有UI人员的支持,就是任性),就可以添加所有dpi的资源。当然,重点还是要满足ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的规律。

好像说了不少废话,哈哈,大概就这么多吧。

4. 修改Android手机的分辨率和屏幕密度

原文: https://blog.csdn.net/CrazyApes/article/details/116994631

之前一直不知道手机的DPI还可以修改,以前测试我都是用好几个测试机,或者通过修改开发者模式下的最小宽度去看适配的问题。呐,前段时间朋友说可以直接用adb改,赶紧记下来,省的以后忘了。

adb 命令

wm size [reset|WxH|WdpxHdp]
return or override display size. width and height in pixels unless suffixed with 'dp'.

查看分辨率: wm size
修改分辨率: wm size 1440x2560
还原初设置: wm size reset

测试机: 华为 FRD-DL00

wm density [reset|DENSITY]
查看密度: wm density
修改密度: wm density 480
还原设置: wm density reset

测试机: 华为 FRD-DL00

Security exception: Must hold permission android.permission.WRITE_SECURE_SETTINGS

莫慌,打开下 开发者选项 中的 USB调试(安全设置) 就行了。

有时间可以都看一下,试一试,蛮好玩的。

说起来巧了,就像前言说的我不知道手机可以改DPI,之前一直是用的开发者模式下的最小宽度修改来测试。后来发现,这个其实也是修改了DPI,仔细想想density和px还有dp的关系,就突然能明白为啥了。

手机 开发者模式

首先得打开手机的 开发者模式 ,咋打开应该不用说了把。
不知道的小伙伴可以试着去找到你手机的 系统版本 那里一顿狂点。
然后就有惊喜了。
比如: Redmi 9A

咱就直接进入 开发者选项 里把。
找到 绘图 模块下的 最小宽度 栏目。
点开之后直接输入想要的最小宽度就行了。
注意: 这里是以 dp 为单位的。
如果你的UI设计图的宽度跟你的手机不符,开发的时候,可以尝试修改这个达到演示的目的。

如下: Redmi 9A

由于输入的是宽度值,无法直观的看到 density 的变化,但是咱们可以用方式一去验证下,就可以看到它的变化是改了 density 的值的。

机型:Redmi 9A

可见,在 分辨率 不变的前提下,修改了最小宽度之后,设备的 density 发生了变化。

Android中的dp在渲染前会将dp转为px,计算公式:
px = density * dp;
density = dpi / 160;
px = dp * (dpi / 160);

原文: https://blog.csdn.net/CrazyApes/article/details/116994631
参考: https://developer.android.google.cn/guide/practices/screens_support

5. iOS、Android 开发单位换算及 UI 切图要求

在移动端 UI 设计中,经常会用到的单位有 4 种:px、pt、dp 和 sp,很多人分辨不清这几种单位及其换算关系,以及 iOS 和 Android 的切图要求,我在这里做下简单的介绍,希望大家读完后能有所收获(如有错误,欢迎纠正)。

px 即 pixel,像素点,电子屏幕上组成图像的最基本单位,在描述屏幕分辨率时也会使用该单位。1px 表示一个像素,例如 iPhone 8 的尺寸为 750px × 1334px,表示在该手机屏幕上,水平方向每行有 750 个像素点,垂直方向每列有 1334 个像素点。

pt 即 point,有两个含义:一是印刷行业常用单位,是一个标准长度单位,绝对大小,1pt = 1/72 英寸 = 0.35mm;二是 iOS 开发用的基本单位,当设计师以 1 倍尺寸进行设计 (375pt × 667pt) 并给出标注稿时,开发人员无需除以 2 便可直接使用。

dp 是安卓开发用的基准单位,在 dpi (屏幕像素密度,即每英寸包含的像素点) 为 160 的屏幕为上,1dp = 1px。为了简单起见,Android 把屏幕密度分为了 5 种:mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi,下文会详细介绍其换算关系。

安卓系统里,sp 与 dp 类似,不同的是 sp 可以根据用户的字体大小首选项进行缩放,而 dp 则不会。 尽量使用 dp 作为空间大小单位,sp 作为文字相关大小单位,例如:新闻类和短信类等大篇幅文本,推荐使用 sp 为单位。

在 iOS 开发中,不同机型的 iPhone 设备需要用到不同倍率的切图,下表格为各 iPhone 机型显示屏参数对比:

这里再简单了解下两个概念,ppi 和 dpi。

ppi (iOS):即 pixel per inch,屏幕像素密度,表示每英寸所包含的像素点,该值越高,屏幕越细腻。
dpi (iOS) :开发像素密度,表示每英寸所包含的开发像素点。

在 iOS 开发中,规定以 ppi = 163,dpi = 163 作为开发基准,

当 ppi = 163,dpi = 163 时,则 1pt = 1px;
当 ppi = 326,dpi = 163 时,则 1pt = 2px;
当 ppi = 401,dpi = 154 时,则 1pt = 2.6px ≈ 3px。
(为什么 iPhone 8+/7+/6+ 的开发基准是154?可能要问问苹果了...)

依此类推,得出换算公式一:

若有小数,四舍五入即可。

在 iOS 开发中,目前只需要 @2x 和 @3x 两种切图,所以导出 2 倍和 3 倍的 png 图片即可。导出前注意检查切图是否存在半像素、毛边等情况,保证对齐像素,这样才能有效避免上线后页面上的 icon 出现虚边的问题,提高细节质量。

另外补充一点:从整体开发尺寸看,iPhone 8 是 375 × 667 pt (@2x),而 iPhone X 是 375 × 812 pt (@3x),同样的宽度,一个用 @2x 图,一个用 @3x 图,iPhone X 表现出了更高的清晰度,如图 2-1 所示。

在 Android 开发中,因为机型参差不齐,需要用屏幕密度来区分设计。

注意,这里的 dpi (Android) 和上文的 dpi (iOS) 是不同的概念,dpi (iOS) 是开发像素密度,而 dpi (Android) 即 dot per inch,表示屏幕像素密度 ,类似 iOS 开发里的 ppi。

Android 中,规定以 dpi = 160 为开发基准,

当 dpi = 160,基准dpi = 160,1dp = 1px;
当 dpi = 240,基准dpi = 160,1dp = 1.5px;
当 dpi = 320,基准dpi = 160,1dp = 2px。

依此类推,得出换算公式二:

在设计图标时,对于 5 种主流的屏幕像素密度 (mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi) 应按照 2:3:4:6:8 的比例进行缩放,如图 3-1 所示。

例如,一个启动图标的尺寸为 48 × 48 dp,这表示在 mdpi 的屏幕上其实际尺寸应为 48 × 48 px;在 hdpi 的屏幕上其实际大小是 mdpi 的 1.5 倍 (72 × 72 px);在 xhdpi 的屏幕上其实际大小是 mdpi 的 2 倍 (96 × 96 px),依此类推。

在某些况行下,还需要提供一种特殊的切图: 点九图 (上图所示)。点九图是 Android 开发中用到的一种特殊格式的图片,文件名以 “.9.png” 结尾。

这种图片能告诉程序,图像哪一部分可以被拉升,哪一部分不能被拉升需要保持原有比列。运用点九图可以保证图片在不模糊变形的前提下做到自适应,比如对话框背景图片就会用到点九图。

--
以上是全部内容,感谢你的阅读!
End

6. 安卓UI设计中屏幕实际密度与系统密度的区别

实际密度”就是我们自己算出来的密度,这个密度代表了屏幕真实的细腻程度,如上述例子中的440dpi就 是实际密度,说明这块屏幕每寸有440个像素。5英寸1080×1920的屏幕密度是440,而相同分辨率的4.5英 寸屏幕密度是490。如此看来,屏幕密度将会出现很多数值,呈现严重的碎片化。而密度又是安卓屏幕将界 面进行缩放显示的依据,那么安卓是如何适配这么多屏幕的呢?
其实,“交互时代”认为每部安卓手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、 480,我们权且称为“系统密度”。大家发现规律没有?相隔数值之间是2倍的关系。一般情况下,240× 320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即mdpi;480×800的屏幕是高密度 240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的屏幕是超超高密度480dpi ,即xxhdpi。

7. Android中图片大小和屏幕密度的关系讲解

1、屏幕密度:指的就是单位英寸面积上的像素点数,与分辨率是两个不同的概念。
ldpi: 屏幕密度为120的手机设备
mdpi: 屏幕密度为160的手机设备(此为baseline,其他均以此为基准,在此设备上,1dp = 1px)
hdpi: 屏幕密度为240的手机设备
xhdpi: 屏幕密度为320的手机设备
xxhdpi:屏幕密度为480的手机设备
目前android默认的low=120 ;Medium =160; High = 240
2.度量单位含义
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dp: dip是一样的
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
in(英寸):长度单位。
mm(毫米):长度单位。

8. Android中分辨率,DPI,DP与PX对应关系

分辨率就是手机屏幕的像素点数。一般为屏幕的“宽×高”,例如分辨率有720×1280的手机设备,表示此屏幕在宽度方向有720个像素点,在高度方向有1280个像素点。

按屏幕对角测量的实际物理尺寸。为简便起见,Android 将所有实际屏幕尺寸分组为四种通用尺寸:小、 正常、大和超大,以英寸(inch)为单位。例如有个5寸的手机设备,是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。

就是每英寸的像素点数,数值越高当然显示越清晰,通常 与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定物理区域的像素较少。

在定义 UI 布局时应使用的虚拟像素单位,用于以密度无关方式表示布局维度 或位置。
密度无关像素等于 160 dpi 屏幕上的一个物理像素,这是 系统为“中”密度屏幕假设的基线密度。在运行时,系统 根据使用中屏幕的实际密度按需要以透明方式处理 dp 单位的任何缩放 。dp 单位转换为屏幕像素很简单: px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。在定义应用的 UI 时应始终使用 dp 单位 ,以确保在不同密度的屏幕上正常显示 UI。

大多数情况下,确保应用中的屏幕独立性很简单,只需以适当的密度独立像素( dp 单位)或 "wrap_content" 指定所有 布局尺寸值。系统然后根据适用于当前屏幕密度的缩放比例适当地缩放位图可绘制对象,以 适当的大小显示。

如上表所示,现在我们在mdpi下设计了一个48x48的应用图标,那么在ldip下大小缩小0.75倍为36x36,在hdip下放大1.5倍为72x72,在xhdpi下放大2倍为96x96,在xxhdpi下放大3倍为144x144,在xxxhdpi下放大4倍为192x192.

android对于不同dpi设备提供了5个目录存放图片,使开发人员根据实际需要对图片适配。一般情况需要UI根据一种DPI密度、或分辨率的设备设计UI,根据不同dpi的比例出图,一般需要xhdpi、xxhdpi两套图,即2x、3x图。
计算相关公式:
px = dpValue * density + 0.5f;
dp = pxValue / density + 0.5f;

9. Android屏幕配适、版本配适与多语言支持

目前主流的屏幕密度:240dpi (480 * 800px) , 320dpi (720*1280px) , 480dpi(1080*1920px)现在新出的手机几乎全是全高清屏(1080*1920px)

Android图片资源目录

mdpi [1倍]160dpi

hdpi [1.5倍]   240dpi

xhdpi [2倍]   320dpi

xxhdpi [3倍] 480dpi

xxxhdpi [4倍] 640dpi

因此对其他图片资源的建议是:

a.一般采用720 * 1280的屏幕尺寸设计,这样切图可以直接适配720 * 1280的机型。

b.720 * 1280下切的图基本可以适配大部分机型。

d.适配480 * 800的机型,只需要把切图 * 0.75。

e.适配1080 * 1920 的机型,只需要把切图 * 1.50即可。

a.以720 * 1280作为设计标准,画布大小定位720 * 1280 (以后1080*1920px做标准亦可,类推)

b.只使用偶数单位的尺寸

c.尽量只使用 24pt, 28pt , 32pt, 44pt大小的字体

d.设计完成之后,所有尺寸的px值除以2作为dp数据交给开发人员

e.三份切图,分别是:xhdpi,hdpi,mdpi的资源,如果要切一份就使用xhdpi

栅格系统的最小单位是8dp,一切距离、尺寸都应该是8dp的整数倍,所有可操作元素最小点击区域尺寸为48dp X 48dp。以下是一些常见的尺寸与距离:

有时候在自定义view,draw的时候单位往往是px,要做一个dpi的转换,需要通过该类获取屏幕的信息,如:屏幕密度,宽高等。

a.尽量使用线性布局(LinearLayout)和相对布局(RelateLayout),尽量不使用绝对布局(AbsoluteLayout)和帧布局(FrameLayout)。

b.尽量使用wrap_content、mach_parent让view自适应或最大化,尽量不要写宽高的值。

c.使用线下布局的百分比weight权重时,要把能伸缩方向的宽度写成“0dp“,如果写成wrap_coent会使布局效果不佳等问题。

d.尽量使用android的Shape自定义view背景,这样会随之自适应。

e.ImageView的ScaleType有几种方式:matrix(默认)、center、centerCrop、centerInside、fitCenter、fitEnd、fitStart、fitXY;尽量使用fitCenter按比例扩大至view宽度,能取得较好适配和显示效果。(更多请参考: Android中的ImageView配适 )

f.获取屏幕分辨率信息,进行动态适配。(参考第三大点)

a.把屏幕设置成单一的横屏或竖屏:

b.根据横竖屏加载不同布局(android: screenOrientation="sensor")

通过this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏,然后在onCreate方法中加载不同的布局

采用第二种方式要注意的有两点

布局问题:

需要在res目录先建立layout-land和layout-port目录相应的xml文件名字相同,然后在两个文件夹下创建相同名字的两套xml,系统就会根据不同的屏幕来进行自动寻找。

切换时activity的生命周期:

activity生命周期在切换横竖屏会有一些有趣的变化

a.不设置activity的android:configChanges时,切换横屏,activity的生命周期会重新调用一次,但是切换竖屏时,生命周期会重新调用两次。

b.当设置activity的android:configChanges=“orientation”时,切换横竖屏都会重新调用各生命周期一次。

c.当设置activity的android:configChanges=“orientation|keyboardHidden”(大于api13时,需要设为“orientation|screenSize”)时,切换横竖屏不会重新调用各生命周期,只会调用onConfigurationChanged方法。

一般设为b或者c

平板应用的特性:

对于大屏幕的平板8英寸以上(参考ipad mini,现在很多高端手机都是5-6英寸了,8英寸以上视为平板吧),基与平板应用的特性,平板应用开发一般采取如下两种策略

1)兼容模式

采用单activity(或者尽量少activity)+多fragment的结构开发应用,在layout资源文件中创建三套布局:手机布局、平板横屏布局、平板竖屏布局。

优点:

        只需要维护一个app

缺点:

        设计及实现的难度变大,更复杂,有时候需要采取折衷方案

        手机apk上由于含有平板的大分辨率图片资源(设计上可以减少内置资源)

2)开发另一套只适配平板的app

优点:

        与手机app分离独立。不会因为要兼容而采用一些折衷方案,影响其性能、内存

        设计和实现更加自由

缺点:

        需要维护两套app

目前谷歌推荐第一种方案,但是国内很多应用是采取第二种方案。

可以通过判断sdk的版本(Build.VERSION.SDK_INT),来为能够使用的版本进行个性化设置

例如:沉浸式状态栏配适

在Android系统4.4以前,状态栏的背景色和字体颜色都是不能改变的。但是4.4以后Google增加了改变状态栏背景透明的方法。可以通过判断sdk的版本,来为能够使用的版本进行个性化设置:

沉浸式状态栏是Android在5.0中引入的,在5.0之前是没有的,并且在Android6.0中沉浸式状态栏的使用方法和5.0不一样,因此需要做到版本兼容,针对于不同的Android进行适配,同样也是通过判断Build.VERSION.SDK_INT来区分版本,进行个性化配适

沉浸式状态栏的实现方式有好几种,更多请参考 沉浸式状态栏的实现

原则:内置图片资源不应该出现文字(如果出现文字需要具备)、所有的文字需要放在res资源目录特定语言目录下。

10. Android中手机屏幕密度该怎么计算

为解决Android设备碎片化,引入一个概念density,也就是密度.它指的是在一定尺寸的物理屏幕上显示像素的数量,一般使用dpi(dots per inch,每英寸像素数)作为单 位.比如设备分辨率为240x320,屏幕物理尺寸为1.5英寸x2英寸(对角线为2.5)它的密度可以用分辨率/尺寸表示:240/1.5或者即320/2,密度为160dpi。算对角线也是一样 的,长的平方+宽的平方=160000,开方后=400.可知400/2.5=160.对于用户来说,密度越大的屏幕显示效果越精细,因为每英寸显示的像素数量更多。 以上的描述就是一个蓝本(此蓝本对应于mdpi). 按照此蓝本一个dp相当于160dpi屏幕中的一个px.同理在,在320dpi的屏幕中,一个dp相当于2个px. 通过这样的成比例放缩,Android解决了需要多个不同屏幕中的大小显示问题. 所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480x800)为例,可以看见其为sw320dp,h533dp. 即宽有320dp,高为533dp. 是怎么计算出来的呢? 将(480的平方+800的平方)开方=932.9523031 然后932.9523031/屏幕尺寸3.7=252.14927,此结果为此手机的屏幕密度. 然后按照上面的蓝本,就应该要计算在该手机上1dp对于多少px.计算如下: 160 1dp=1px 252.14927 1dp=?px 结果为: 252.14927/160=1.5759329 注意: 在此一般不取1.5759329,只取到1.5即可. 所以:480/1.5=320;800/1.5=533.3333(通常取为533),即上述的sw320dp,h533dp. 手机屏幕密度的对应关系 120上下浮动的都属于ldpi 160上下浮动的都属于mdpi 240上下浮动的都属于hdpi 320上下浮动的都属于xdpi 以摩托罗拉ME525+(3.7英寸 分辨率854x480像素)为例: 将(480的平方+854的平方)开方=979.6509 然后979.6509/屏幕尺寸3.7=264.770529,此结果为此手机的屏幕密度.对应为hdpi 264.770529/160=1.6548 即在此手机中1dp=1.6548个像素,只取到1.6即可 所以:480/1.6=300;854/1.6=533.75(通常取为533) 按照这个逻辑,算出来的宽应该是只有300dp.悲剧的是,如果某个控件的宽为300,在此手机上是不能铺满手机的宽的. 也就是说除以的不是1.6而还是1.5!!!!所以将宽设置为320即可 总结:在hdpi中,像素转换为dp统一用的是:像素/1.5 以联想K860(5.0英寸,分辨率1280x720像素)为例: 将(1280的平方+720的平方)开方=1468.60478 然后1468.60478/屏幕尺寸5=293.720,此结果为此手机的屏幕密度.对应为xdpi 293.720/160=1.8357 即在此手机中1dp=1.8357个像素 所以:1280/1.8357=697.281;720/1.8357=392.22 按照这个逻辑,算出来的宽应该是392.22.悲剧的是,如果某个控件的宽为392.22,在此手机上是显示不完全的. 也就是说除以的不是1.8而是2!!!!所以将宽设置为360即可 总结:在xdpi中,像素转换为dp统一用的是:像素/2 注意问题1: 在建立模拟器的时候注意 854x480在Hardware中,应该将Abstracted LCD density设置为240,并手动输入分辨率 1280x720在Hardware中,应该将Abstracted LCD density设置为320,并手动输入分辨率 注意问题2: 多个layout文件夹在命名上有相应规则,以分辨率480x854为例,需要建立480x854像素的layout文件夹,命名:layout-854x480,有两点需要注意:①大数(854)必须在前, 否则会报错;②两个数字之间的符号是小写英文字母“x”,不是乘号

热点内容
android开发sd卡 发布:2025-07-04 15:50:28 浏览:948
离歌脚本 发布:2025-07-04 15:50:13 浏览:414
距估计算法 发布:2025-07-04 15:48:50 浏览:813
安卓手机的号码在哪里看 发布:2025-07-04 15:36:53 浏览:27
蒲公英路由器服务器端ip 发布:2025-07-04 15:20:30 浏览:678
python学习中 发布:2025-07-04 15:20:26 浏览:257
linux查看cuda版本 发布:2025-07-04 15:15:49 浏览:44
反编译浏览器 发布:2025-07-04 15:15:45 浏览:453
java直播网站源码 发布:2025-07-04 14:46:35 浏览:170
安卓应用市场消费记录怎么删除 发布:2025-07-04 14:39:47 浏览:31