Android如何根据当前显示配置匹配资源 layout / drawable

android入门之应用资源 文档:https://developer.android.com/guide/topics/resources/providing-resources#ResourcesFromCode 1.简介 资源是指代码使用的附加文件和静态内容,如位图、布局定义、界面字符串、动画说明等。 您应始终外部化应用资源(例如图像和代码中的字符串),以便单独对其进行维护。 还应为特定设备配置提供备用资源,方法是将其进行分组并放入专门命名的资源目录中。 在运行时,Android 会根据当前配置使用合适的资源。 阅读详情


Android如何匹配最佳资源文件 layout / drawable, 比如 res/drawable-mdpi, res/layout-mdpi-976x600 等

匹配流程图:


下面是英文原文,

原网址是:http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch

代码分析以后有时间补充。


How Android Finds the Best-matching Resource

When you request a resource for which you provide alternatives, Android selects which alternative resource to use at runtime, depending on the current device configuration. To demonstrate how Android selects an alternative resource, assume the following drawable directories each contain different versions of the same images:

drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

And assume the following is the device configuration:

Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key

By comparing the device configuration to the available alternative resources, Android selects drawables fromdrawable-en-port.

The system arrives at its decision for which resources to use with the following logic:

  1. Though this procedure is executed for each resource requested, the system further optimizes some aspects. One such optimization is that once the device configuration is known, it might eliminate alternative resources that can never match. For example, if the configuration language is English ("en"), then any resource directory that has a language qualifier set to something other than English is never included in the pool of resources checked (though a resource directory without the language qualifier is still included).Eliminate resource files that contradict the device configuration.

    The drawable-fr-rCA/ directory is eliminated, because it contradicts the en-GB locale.

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    Exception: Screen pixel density is the one qualifier that is not eliminated due to a contradiction. Even though the screen density of the device is hdpi, drawable-port-ldpi/ is not eliminated because every screen density is considered to be a match at this point. More information is available in the Supporting Multiple Screensdocument.

  2. Pick the (next) highest-precedence qualifier in the list (table 2). (Start with MCC, then move down.)
  3. Do any of the resource directories include this qualifier?
    • If No, return to step 2 and look at the next qualifier. (In the example, the answer is "no" until the language qualifier is reached.)
    • If Yes, continue to step 4.
  4. Eliminate resource directories that do not include this qualifier. In the example, the system eliminates all the directories that do not include a language qualifier:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    Exception: If the qualifier in question is screen pixel density, Android selects the option that most closely matches the device screen density. In general, Android prefers scaling down a larger original image to scaling up a smaller original image. See Supporting Multiple Screens.

  5. Go back and repeat steps 2, 3, and 4 until only one directory remains. In the example, screen orientation is the next qualifier for which there are any matches. So, resources that do not specify a screen orientation are eliminated:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    

    The remaining directory is drawable-en-port.

When selecting resources based on the screen size qualifiers, the system will use resources designed for a screen smaller than the current screen if there are no resources that better match (for example, a large-size screen will use normal-size screen resources if necessary). However, if the only available resources are largerthan the current screen, the system will not use them and your application will crash if no other resources match the device configuration (for example, if all layout resources are tagged with the xlarge qualifier, but the device is a normal-size screen).

Note: The precedence of the qualifier (in table 2) is more important than the number of qualifiers that exactly match the device. For example, in step 4 above, the last choice on the list includes three qualifiers that exactly match the device (orientation, touchscreen type, and input method), while drawable-en has only one parameter that matches (language). However, language has a higher precedence than these other qualifiers, so drawable-port-notouch-12key is out.

To learn more about how to use resources in your application, continue to Accessing Resources.

Android dimens.xml 不同分辨率生成 Android 工程里面values文件夹有dimens.xml文件,为了适配不同的分辨率,例如values-sw400dp,values-sw600dp,values-sw720dp,如果自己去生成这几个文件夹,需要根据values里面的dimens.xml进行计算,然后修改,这个jar包的作用是只要填写你要生成的dp数值,例如values-sw600dp,输入值是600,另外也可以输入values文件夹的根目录,values目录下所有带有dimens的xml文件,最后都可以生成到对应的分辨率文件夹下 立即下载

相关推荐

安卓种子搜索(p2pSearcher/p2p搜索)BT搜索

种子搜索 安卓种子搜索 p2pSearcher BT搜索

Android 资源匹配过程详解

针对大多数APK应用程序,开发人员都会提供各种不同的资源。比如对于同一张图片image.png,我们通常会提供高分辨率,中分辨率和低分辨率三个版本。res/ drawable/ image.png drawable-hdpi/ image.png drawable-mdpi/ image.png

BridgeGeorge 3403

自动生成Android适配不同机型、语言资源文件

自动生成适配Android不同设备分辨率资源目录及文件 根据配置文件自动生成适配Android不同语言资源目录及文件

Android 资源文件匹配规则

Android 资源文件匹配规则 Android 资源文件,可以加各种限定标注,类似我们常用的layout-hdpi ,layout-xhpdi,value-zh-rCN,layout-400x800等等。官方支持的请参考: 应用资源概览 那么Android是怎么去判断使用哪个一个呢? 资源查找 我们知道,不管定义多少个限制符的资源文件,ID只有一个,所以到底取哪个文件夹下面的呢? 以Resource#getDrawable开启。主要流程是:Resource#getDrawable-》Resource#ge

qunimaode的博客 878

【UE 反射】反射的原理是什么?如何使用机制?

静态类型检查确保了类型的早期一致性和高效的代码执行,但减少了灵活性。动态类型检查提供了更大的灵活性,但增加了运行时的开销和潜在的错误。反射作为一种动态特性,无论是在静态类型语言还是动态类型语言中,都提供了强大的运行时类型操作能力,但也伴随着性能和安全性方面的权衡。通过理解这些联系,开发者可以在不同的编程语言和应用场景中选择适合的类型检查方式和反射机制,以实现所需的动态行为和灵活性,同时保证性能和安全性。

hhw_hhw的博客 6034

用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移

本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。

kkk56的博客 858

Android是怎样匹配资源的

在运行时,系统通过以下程序确保任何给定资源在当前屏幕上都能保持尽可能最佳的显示效果: 系统使用适当的备用资源 根据当前屏幕的尺寸和密度,系统将使用您的应用中提供的任何尺寸和密度特定资源。例如,如果设备有高密度屏幕,并且应用请求可绘制对象资源,系统将查找与设备配置最匹配的可绘制对象资源目录。根据可用的其他备用资源,包含 hdpi 限定符(例如drawable-hdpi/)的资源目录可能是最

musk6的博客 742

Anki小白必看:手把手教你打造高颜值个性化笔记模板(附Leaflyer模板下载)

本文为Anki新手提供详细的个性化笔记模板设计指南,从基础配置到高级定制技巧,帮助用户打造高效记忆系统。特别推荐Leaflyer模板下载,通过视觉优化和功能强化,显著提升学习体验和记忆效率。

weixin_28717969的博客 433

Android应用程序资源的查找过程分析

我们知道,在Android系统中,每一个应用程序一般都会配置很多资源,用来适配不同密度、大小和方向的屏幕,以及适配不同的国家、地区和语言等等。这些资源是在应用程序运行时自动根据设备的当前配置信息进行适配的。这也就是说,给定一个相同的资源ID,在不同的设备配置之下,查找到的可能是不同的资源。这个资源查找过程对应用程序来说,是完全透明的。在本文中,我们就详细分析资源管理框架是如何根...

weixin_30607659的博客 486

Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法

Quartus II 13.1 出现 ''can't find design entity '' 问题的解决方法

qq_62076686的博客 1万+

Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化

本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。

weixin_29310631的博客 557

Android资源分组及匹配详解

资源: 代码中使用到的文件,静态文本。包括位图,布局文件,字符串,动画等等。 开发中,应当外部化资源,如图像和字符串,有利于维护资源。同时必要时也可以为不同设备提供支持。 一、资源分组 1.默认资源: MyProject/ src/ MyActivity.java res/ drawable/ graph

dapangzao的专栏 2172

HID报告描述符实战解析:从Usage到Item的完整设计流程

本文深入解析了HID报告描述符的设计流程,从核心概念Usage(用途定义)入手,详细阐述了如何通过Item(条目)的三种角色——全局、局部与主干,构建出能被系统正确识别的设备“说明书”。文章以标准USB鼠标和键盘为例进行实战拆解,并介绍了使用Report ID与自定义设备等进阶设计方法,帮助开发者掌握这一实现USB设备即插即用的关键技术。

weixin_29230865的博客 282

Android开发规范之------Android 资源文件命名与使用

以下主要引用阿里巴巴 Android 开发手册: Android 资源文件命名与使用: 【推荐】资源文件需带模块前缀。 【推荐】layout 文件的命名方式。 Activity 的 layout 以 module_activity 开头 Fragment 的 layout 以 module_fragment 开头 Dialog 的 layout 以 module_dialog 开头 ...

zhao2017的博客 3457

华为OD机试 - 单词倒序(Python/JS/C/C++ 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1226

大模型自我认知微调的实战教程

本文主要介绍了大模型自我认知微调的实战教程,希望对学习大语言模型的同学们有所帮助。微调成功并保留原有能力的截图如下所示: 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 3. 实战代码 3.1 配置数据集 3.2 lora微调

herosunly的博客 4万+

android values 资源说明

在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译。 asset/(相当于用户目录例如放txt文件) res/ anim(动画) drawable(selector,sharp) layout menu(菜单) xml(普通xml) values             value ...

靓靓软件工作室 1060

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android资源管理最佳实践:Buffer Guidelines中的字符串、样式与主题命名规范终极指南

在Android开发中,资源管理是构建高质量应用的关键环节。Buffer Android Guidelines项目提供了一套完整的资源命名规范体系,帮助开发者创建清晰、一致且易于维护的Android应用。本文将深入解析Buffer Guidelines中的字符串、样式与主题命名规范,为您提供实用的Android资源管理指南。😊 ## 📱 为什么资源命名规范如此重要? 在大型Android项

gitblog_00394的博客 831

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

res中layout 和drawable目录的介绍

layout这个原来的文件夹及资源一定要存在,否则会出现错误 同时在命名layout文件夹时,大数放在小数的前面,否则会报错 关于系统的资源配置的目录(我只列出一些大概,默认项目会有一些资源配置目录) Android系统支持多配置资源文件,我们可以追加新的资源目录到你的Android项目中。命名规范: 资源名字-限制符 layout

RonnyJiang的博客 1500

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android ImageView不显示JPEG图片的排查与解决方案

在Android开发中,ImageView是展示图片的核心控件,而JPEG作为常见的图片格式,其显示问题常困扰开发者。图片显示原理涉及资源加载、内存管理和渲染流程。正确配置资源路径、处理图片格式和优化内存使用是关键技术点。通过BitmapFactory解码验证图片有效性,结合Glide等图片加载库处理大图,能有效解决JPEG显示问题。这些技术不仅提升应用性能,也优化用户体验,适用于社交、电商等图片密集型应用场景。掌握ImageView的scaleType配置和WebP格式转换等进阶技巧,能进一步优化图片显示

weixin_30251829的博客 329

Android-0.drawable等资源的命名规则和查找规则

drawable命名规则

hgy413的专栏 2415

android之res下面drawable-xxdpi说明

ldpi:240x320 保存低分辩率图片资源 mdpi:320x480 保存中等分辨率图片资源 hdpi:480x800、480x854 保存高分辨率图片资源 xhdpi:至少960*720 xxhdpi:1280×720 以上图片资源都可以通过Resources.getDrawable(id)来获取资源类型

lazy的专栏 2084

Android资源管理框架(Asset Manager)

把之前在新浪博客里写的分享也备份移植到优快云博客,之前本文 Android应用程序主要由两部分内容组成:代码和资源。资源主要就是指那些与UI相关的东西,例如UI布局、字符串和图片等。代码和资源分开可以使得应用程序在运行时根据实际需要来组织UI。这样就可使得应用程序只需要编译一次,就可以支持不同的UI布局。这种特性使得应用程序在运行时可以适应不同的屏幕大小和密度,以及不同的国家和语言等。

zoe技术博客专栏 759

Android平板app开发布局文件,Android平板开发相关

关于系统的资源配置的目录(我只列出一些大概,默认项目会有一些资源配置目录)Android系统支持多配置资源文件,我们可以追加新的资源目录到你的Android项目中。命名规范: 资源名字-限制符layout/drawble文件夹说明layout默认中等屏幕layout-small小屏幕layout-large大屏幕layout-xlarge特大屏幕layout-land横屏layout-port竖屏...

weixin_39826809的博客 728

Android UI适配总结(一)寻找最佳匹配资源

Android UI适配总结(一)寻找最佳匹配资源 系统是怎么确定最佳资源的? 获取手机当前的基本配置信息(语言,横竖屏,屏幕密度,屏幕尺寸等等) 根据这些配置信息,排除apk包中与这些配置信息相矛盾的资源目录,假设系统语言是cn,那么所有的其他语言的目录都会被排除掉,注意系统并不会根据一个dpi的冲突而排除掉含有其他dpi的目录,dpi这个qualifier非常特殊 按照qualifirer的...

weixin_34025151的博客 162

Android屏幕适配-资源文件夹命名与匹配规则

说明:本文档目的为分析android工程res目录下的资源文件夹(drawable,values,layout等)在屏幕适配方面的限定与适配方法。1、 Res下文件夹命名方式1. 可用的命名属性在文档1中的表格“Table 2. Configuration qualifier names. ”中有说明(表格太大,不方便在此张贴),表格中的"Configuration&qu...

ruxueqin的博客 755
上一篇: 转--商场生意经--人际关系经营
下一篇: Ubuntu 11.10 mysql problem after upgrade
勤奋专注
博客等级 码龄19年 80粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值