drawable不同目录你会怎么选择

本文解释了Android项目中不同分辨率资源目录的作用及如何正确使用它们。通过一个实例展示了将相同图片放置于不同drawable目录下所呈现的效果差异,帮助开发者了解如何根据UI设计选择合适的资源存放位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以接触Android的会有一个疑问,为什么res下面会有这么多目录,并且都是用来放图片文件的,那我应该选择放在哪个目录呢?会无所谓的随便找个目录放一下,反正都能找到图片资源。其实并不这样的,google也不是吃饱了没事干搞几个不同的目录一样的,当然是有他的区别。

首先我们来看一个效果图

这是一个测试例子,手机分辨率都是480*800,这些都是Button,设置的背景都是同一个图片的copy,分别放在不同的drawable上当里的效果。资料文件的是205*77的图片,并且button的高一宽都是使用的wrap_content也是传说中的内容自适应。但是显示出来效果是不一样的。只能有人会说我看到了区别,但我还是不知道怎么放,ok。这个也是有讲究的。

怎么放,是根据美工的UI设计来的,比如美工是480*800的设计的就你放在drawable-hdpi目录里面,这样可以缩小和设计图的感觉的不同。下面是对照表

drawable-ldpi  240×320

drawable-mdpi  320x480

drawable-hdpi  480x800

drawable-xhdpi  960x1280                  ----这个值不太确定,但是可以确定的是比hdpi更大的就是。

 

设计也是有原则的,都是以一个主流分辨率来设计的,随便设备升级,分辨率会越来越高,所以设计也会跟上的,因为图片太小需要放大就会模糊。但是大图同时带来的问题就是资源文件的变大,所以量发挥android的特性,比如使用9png啊。

<think>好的,我需要回答用户关于Android中drawable资源如何根据设备分辨率进行选择的问题。用户提到了不同的density bucket,如mdpi、hdpi、xhdpi等,以及资源选择机制。首先,我应该先回忆一下Android资源管理的基本知识。 Android的资源目录使用限定符来适配不同设备配置,比如屏幕密度。drawable目录的后缀如hdpi、xhdpi等就是用来区分不同密度的资源。系统会根据设备的屏幕密度自动选择最合适的资源。例如,如果设备是xhdpi,系统会优先从drawable-xhdpi目录中获取图片,如果没有,则寻找更接近的目录,并可能进行缩放处理[^1]。 接下来需要解释每个density bucket对应的dpi范围。记得mdpi是基准密度,约160dpi,hdpi是240dpi,xhdpi是320dpi,xxhdpi是480dpi,xxxhdpi是640dpi。这些数值可能需要准确核对,确保正确性。 然后要说明资源选择的过程。系统会根据设备的屏幕密度选择最接近的目录,如果没有完全匹配的,会选择更高或更低的密度目录,并缩放图片。例如,一个280dpi的设备可能使用hdpi目录的资源,并放大到1.17倍(因为hdpi是240dpi,而280/240≈1.17)。不过需要注意,如果存在更接近的高密度目录,比如xhdpi(320dpi),可能系统会选择更高的目录并缩小,这取决于哪个更接近。这时候可能需要查阅Android官方文档确认逻辑,但用户提供的引用中提到系统根据屏幕密度选择对应的密度图,所以可能优先匹配,否则找最接近的,并缩放。 还要提到nodpi目录,这个目录的资源不会被缩放,适用于不需要根据密度调整的图片资源。这点也很重要,用户可能不知道,可以补充进去。 用户可能还想知道如何正确组织资源目录,以及不同密度的图片应该如何准备。例如,为不同密度提供不同分辨率的图片,以确保显示效果。例如,xhdpi的图片尺寸通常是mdpi的1.5倍,这样在更高密度的屏幕上显示更清晰,而系统会自动处理缩放。 最后,需要生成相关问题,可能涉及如何测试不同密度的资源、如何处理没有对应资源的情况、最佳实践等。 现在需要组织这些信息,按照用户要求的结构,使用中文回答,分步骤解释,确保LaTeX格式正确,比如dpi数值用$符号包裹。例如,mdpi对应约$160\ \text{dpi}$。同时,引用用户提供的参考信息,末尾添加引用标识[^1]。</think>Android系统通过**分辨率限定符**自动匹配drawable资源,具体流程如下: ### 一、密度分级与对应关系 1. **基准密度**:$mdpi$($160\ \text{dpi}$)作为基础密度,其他密度按比例计算: - $ldpi$(低密度):约$120\ \text{dpi}$($0.75\times$基准) - $hdpi$(高密度):$240\ \text{dpi}$($1.5\times$基准) - $xhdpi$(超高密度):$320\ \text{dpi}$($2\times$基准) - $xxhdpi$:$480\ \text{dpi}$($3\times$基准) - $xxxhdpi$:$640\ \text{dpi}$($4\times$基准)[^1] 2. **目录命名规则** drawable资源目录按`drawable-<density>`格式命名,例如: ```bash res/ drawable-mdpi/ drawable-hdpi/ drawable-xhdpi/ ``` ### 二、资源选择逻辑 1. **精确匹配优先** 系统优先查找与设备屏幕密度完全匹配的目录。例如:$320\ \text{dpi}$设备会直接使用`drawable-xhdpi`中的资源。 2. **近似匹配策略** 若无精确匹配,按以下顺序选择: - 更高密度目录(缩小图片) - 更低密度目录(放大图片) - 最终回退到默认的`drawable`目录 $$缩放比例 = \frac{\text{设备密度}}{\text{目录对应密度}}$$ 例如:$280\ \text{dpi}$设备使用`drawable-hdpi`资源时,缩放比例为$\frac{280}{240} \approx 1.17$。 3. **nodpi特殊处理** 放置在`drawable-nodpi`目录的资源**不会自动缩放**,适用于需要保持原始尺寸的素材(如纹理图案)。 ### 三、开发最佳实践 1. **提供多版本资源** 建议至少为`hdpi`、`xhdpi`、`xxhdpi`提供资源,适配主流设备: - `mdpi`图标尺寸:$48\times48\ \text{px}$ - `xxhdpi`应为$144\times144\ \text{px}$($3\times$基准) 2. **矢量图形优先** 使用VectorDrawable或图标字体可避免多密度适配问题,但需注意系统兼容性。 3. **测试方法** 通过Android Studio的**Layout Inspector**或设置`adb shell wm density`模拟不同密度环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值