Android Density

本文详细解释了Android系统中density的概念及其作用原理,包括不同分辨率屏幕下的density设置、如何在代码中支持不同density的屏幕以及实现density支持的关键源码。
1.什么是density

  1)density

  density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,density就小,通常

  屏幕实际分辨率为240px*400px时,density=120

  屏幕实际分辨率为320px*533px,density=160

  屏幕实际分辨率为480px*800px,density=240

  2)分辨率

  是整个屏是多少点,比如800x480,它是软件的显示单位

  3)从Android1.6版本开始支持density(对应API Level 4)

  用于解决应用在屏幕大小不同的硬件上正常显示的问题

  2.相关代码及设置

  1)AndroidManifest.xml

  <supports-screens android:anyDensity="true"/>

  <uses-sdk android:minSdkVersion="4"></uses-sdk>

  这个参数在API Level 4也就是SDK 1.6以后才启用的,而且1.6版本的API Level 4的应用默认值就是True

  2)资源目录名(android 2.0以后)

  res/xxx-hdpi当density为240时,使用此目录下的资源

  res/xxx-mdpi当density为160时,使用此目录下的资源

  res/xxx-ldpi当density为120时,使用此目录下的资源

  res/xxx不常后缀,为默认设置,同xxx-mdpi

  3)资源单位(xml文件中定义大小的单位)

  a)dp=dip=dx (Density independent pixel)

  基于屏幕密度的抽象单位,设备无关的点,用于说明与密度无关的尺寸和位置。这些单位是相对于一个160dpi的屏幕,所有一个dp是160dpi屏幕上的一个点。

  b)px

  px指软件的单位点,设备相关的点

  c)具体使用

  i.布局时尽量使用单位dip,少使用px

  若使用px,如果设某控件大小400x400px,在800x480上显示正常,而在533x320的屏上就超出屏幕了

  若使用dp,如果设某控件大小为160x160dp,就可以通过从系统中取density来算出真正的大小,比如在800x480屏的density设为240,而533x320屏的density设为160,借以下公式计算

  pixels = dips * (density / 160)

  在800x480在屏中显示240象素,而在533x320的屏中显示为160象素,控件在屏中显示的比例是一样的。

  ii.内部的处理过程分为三步:

  取screen中其它元素,转为应用的值,计算应用各控件位置,然后再转成800x480以供真正显示

  若res-xxx不存在,则读取res有的资源,然后对其做相应缩放

  3.实现density的关键源码

  1)BitmapFactory.java(用于缩放图片)

  2)ComptibilityInfo.java(用于位置计算)
Android 中的像素密度(Density)是一个与设备物理屏幕特性密切相关的概念。它定义了屏幕上每英寸包含的像素数量(通常用 dpi 表示)。像素密度是 Android 系统用来适应不同设备屏幕的重要机制之一,确保了 UI 元素在不同设备上显示的大小和比例保持一致。 Android 系统通过将物理像素(px)抽象为与密度无关的像素(dp 或 dip)来实现这一目标。dp 是一种虚拟像素单位,其大小会根据设备的像素密度进行调整。例如,在 160dpi 的设备上,1 dp 等于 1 px;而在更高或更低的密度设备上,系统会根据比例进行缩放。这种抽象机制使得开发者可以使用 dp 作为 UI 布局的单位,而无需担心不同设备的分辨率差异[^1]。 为了更好地适配不同密度的屏幕,Android 提供了多套资源目录(如 `drawable-mdpi`、`drawable-hdpi`、`drawable-xhdpi` 等),每套资源对应不同的像素密度范围。系统会根据设备的实际密度自动选择合适的资源进行加载。这种机制简化了 UI 适配的过程,并提升了应用在不同设备上的显示效果。 在某些情况下,开发者可能需要手动配置应用的适配参数。例如,在 `AndroidManifest.xml` 文件中,可以通过 `<meta-data>` 标签指定设计稿的宽度和高度(以 dp 为单位),从而实现更精确的布局适配。以下是一个典型的配置示例: ```xml <manifest> <application> ... <meta-data android:name="design_width_in_dp" android:value="360"/> <meta-data android:name="design_height_in_dp" android:value="640"/> ... </application> </manifest> ``` 通过这种方式,可以确保应用在不同设备上按照设计稿的比例进行适配,从而避免 UI 元素因屏幕密度差异而导致的显示异常[^2]。 ### 像素密度的匹配规则 Android 系统定义了一套像素密度的匹配规则,用于选择合适的资源文件。系统会根据设备的实际密度与资源目录的密度进行匹配,优先选择最接近的资源。如果找不到完全匹配的资源,则会使用默认资源(通常位于 `drawable` 或 `values` 目录下)。 ### 总结 理解 Android 中的像素密度概念及其配置方法对于开发高质量的应用至关重要。通过合理使用 dp 单位和多套资源目录,结合 `AndroidManifest.xml` 中的配置,可以有效地实现跨设备的 UI 适配,确保应用在不同屏幕密度下的显示效果一致且美观。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值