android 资源说明

来源:互联网 发布:淘宝怎么搬家到微店 编辑:程序博客网 时间:2024/06/09 20:51
  • Android的基础
    • 什么是Android?
    • 应用基础
  • 框架主题
    • 活动
      • 片段
      • 装载机
      • 任务和返回堆栈
    • 服务
      • 绑定服务
    • 内容提供商
      • 内容提供商的基础 
      • 创建一个内容提供商 
      • 日历提供 新的!
    • 意图和意图过滤器
    • 进程和线程
    • 用户界面
      • XML的布局
      • 输入事件
      • 菜单 更新
      • 行动起来吧
      • 对话
      • 通知
        • 吐司通知
        • 状态栏通知
      • 拖放
      • 样式和主题
      • 自定义组件
      • 绑定AdapterView数据
      • 常见的布局对象
      • 的Andr​​oid如何绘制视图
    • 应用程序资源
      • 提供资源
      • 访问资源
      • 处理运行时更改
      • 本土化
      • 资源类型
        • 动画
        • 彩色状态列表
        • 绘制
        • 布局
        • 菜单
        • 风格
        • 更多类型
    • 数据存储
      • 数据备份
    • 安全性和权限
    • AndroidManifest.xml文件
      • <action>的
      • <activity>
      • <activity-alias>
      • 的<application>
      • <category>
      • <compatible-screens>
      • <data>的
      • <grant-uri-permission>
      • <instrumentation>
      • <intent-filter>
      • <manifest>
      • <meta-data>
      • <path-permission>
      • <permission>
      • <permission-group>
      • <permission-tree>
      • 的<p​​rovider>
      • <receiver>
      • 的<service>
      • <supports-gl-texture>
      • <supports-screens>
      • <uses-configuration>
      • <uses-feature>
      • <uses-library>
      • <uses-permission>
      • <uses-sdk>
    • 图形 新!
      • 帆布和的drawable
      • 硬件加速 新!
      • OpenGL的
    • 动画
      • 物业动画
      • 查看动画
      • 绘制动画
    • renderscript 更新
      • 图像
      • 计算
      • 运行时API参考
    • 多媒体和相机
      • 媒体播放
      • JetPlayer
      • 相机 新的!
      • 音频捕捉
    • 复制和粘贴
    • 传感器 新的!
      • 传感器概述
      • 运动传感器
      • 位置传感器
      • 环境传感器
    • 位置与地图
      • 获取用户位置
    • 应用部件
    • 蓝牙
    • 近场通信 更新
      • NFC的基础
      • 先进的NFC
    • Wi-Fi的直接 新!
    • 的USB
      • 附件
      • 主持人
      • 打开附件的开发套件
    • 会话发起协议
    • 搜索
      • 创建一个搜索界面
      • 添加最近查询建议
      • 添加自定义的建议
      • 可检索的配置
    • 设备管理
    • 测试
      • 测试原理
      • 活性测试
      • 内容提供商测试
      • 服务测试
      • 要测试什么
  • Android Market的主题
    • 在Android Market出版
    • 应用许可
    • 在应用程序帐单
      • 在应用程序结算概述
      • 实施程序帐单
      • 安全设计
      • 测试应用程序帐单
      • 管理应用程序帐单
      • 在应用程序帐单参考
    • 市场过滤器
    • 多的APK支持
  • 发展
    • 介绍
    • 管理虚拟设备
      • 随着AVD管理
      • 从命令行
      • 使用Android模拟器
    • 使用硬件设备
    • 项目管理
      • 从与ADT的Eclipse的
      • 从命令行
    • 构建和运行
      • 从与ADT的Eclipse的
      • 从命令行
    • 调试
      • 从与ADT的Eclipse的
      • 从其他的IDE
      • 使用DDMS的
      • 阅读和写作日志
      • 调试和剖析的用户界面
      • 剖析与Traceview和dmtracedump
      • 使用开发工具软件
    • 测试
      • 从与ADT的Eclipse的
      • 从其他的IDE
    • 工具
      • 亚行
      • ADT的
      • 机器人
      • bmgr
      • dmtracedump
      • 画9-补丁
      • 模拟器
      • etc1tool
      • 层次浏览器
      • HPROF-CONV
      • layoutopt
      • logcat
      • mksdcard
      • 猴子
      • monkeyrunner
        • MonkeyDevice
        • MonkeyImage
        • MonkeyRunner
      • ProGuard的
      • sqlite3的
      • traceview
      • zipalign
  • 出版
    • 发布概述
    • 准备发布
    • 签署您的应用程序
    • 版本应用程序
  • 最佳实践
    • 兼容性
    • 支持多个屏幕
      • 分发到特定屏幕
      • 屏幕兼容模式
      • Android 1.5的策略
    • 支持平板电脑和手机新!
    • 用户界面指南
      • 图标设计
        • 发射器的图标
        • 菜单图标
        • 操作栏图标
        • 状态栏图标
        • 选项​​卡图标
        • 对话框图标
        • 列表视图图标
      • 应用小工具设计
      • 活动和任务设计
      • 菜单设计
    • 可访问性设计
    • 性能设计
      • JNI的提示
    • 为响应设计
    • 为无缝设计
    • 安全设计
  • Web应用程序
    • Web应用程序概述
    • 针对Web应用程序的屏幕
    • 建设中的WebView的Web应用程序
    • 调试Web应用程序
    • Web应用程序的最佳实践
  • 附录
    • Android API的水平
    • 应用安装位置
    • 支持的媒体格式
    • 意向名单:Google企业应用套件
    • 的AIDL
    • 词汇表
应用程序资源:

提供资源

快速浏览

  • 不同类型的资源属于不同的子目录RES /
  • 替代资源提供配置特定的资源文件
  • 始终包含默认的资源,使您的应用程序不依赖于特定的设备配置

在这份文件中

  1. 分组的资源类型
  2. 提供替代资源
    1. 限定符的名称规则
    2. 创建别名资源
  3. 资源,提供最佳的设备兼容性
    1. 提供Android 1.5的屏幕资源的兼容性
  4. Android是如何找到最佳匹配的资源
  5. 已知问题

参见

  1. 访问资源
  2. 资源类型
  3. 支持多个屏幕

你应该总是外部应用程序资源,如图像和从你的代码的字符串,这样您就可以保持他们的独立。你也应该提供具体的设备配置替代资源,特别命名的资源目录分组。Android使用在运行时,使用适当的资源,根据当前配置。例如,您可能需要提供不同的UI布局,根据屏幕大小或根据语言设置不同的字符串。

一旦你外部的应用程序资源,你可以访问他们使用的资源,在项目的生成的ID ŕ类。在访问资源讨论如何在应用中使用的资源。本文档介绍了如何在你的Android项目分组的资源,并提供具体的设备配置替代资源。

分组的资源类型

你应该把每个类型的资源,在具体项目的子目录 RES /目录。例如,这里有一个简单的项目文件层次:

MyProject的/    src /           MyActivity.java中      RES /        绘制/               的icon.png           布局/              main.xml中            info.xml         值/               的strings.xml  

正如你可以看到在这个例子中,RES /目录中包含的所有资源(子目录):图像资源,两个布局资源,和一个字符串资源文件。资源目录名称是重要的,在表1所述。

表1。资源目录支持的项目RES /目录内。

目录资源类型动画/XML文件,定义属性的动画。阿尼姆/定义补间动画的 XML文件。(物业动画也可以被保存在这个目录,但优先财产动画区分两种类型的动画/目录。)彩色/XML文件定义一个色彩的国家名单。看到彩色的国家名单资源绘制/

位图文件(PNG。0.9 PNG JPG GIF。 )或XML文件编译成以下的绘制资源亚型:

  • 位图文件
  • 九补丁(重相当大的位图)
  • 国家列表
  • 形状
  • 动画的drawable
  • 其他的drawable

Drawable的资源。

布局/XML文件定义的用户界面布局。见布局资源。菜单/XML文件定义应用程序菜单,如一个选项菜单,上下文菜单,子菜单。见菜单资源。原料/

任意文件保存在其原始形式。要打开这些原料资源 的InputStream,请致电与资源ID Resources.openRawResource() ,这是R.raw。

不过,如果你需要访问原始文件名 ​​和文件层次,你可能会考虑保存在一些资源性资产/目录(而不是RES /生/)。资产在文件/没有给出一个资源ID,所以你可以看到他们只使用AssetManager

值/

XML文件包含简单值,如字符串,整数和颜色。

而在其他的XML资源文件RES /子目录定义一个单一的资源基础上的XML文件名 ​​,文件中的值/目录描述多种资源。在此目录中的文件,每个儿童<resources>元素定义了一个单一的资源。例如,<string>的元素创建一个 R.string资源1 <色彩>元素创建R.color的 资源。

因为每个资源与自身的XML元素的定义,你可以将文件命名为任何你想要的,一个文件放置在不同的资源类型。然而,为清楚起见,你可能要放置在不同的文件中独特的资源类型。例如,这里有资源,你可以在这个目录中创建的一些文件名约定:

  • arrays.xml资源阵列(类型的数组)。
  • colors.xml的颜色值
  • 维值 dimens.xml为。
  • 为字符串值的strings.xml 。
  • styles.xml的风格。

字符串资源, 文体资源,和 更多的资源类型。

XML /可以通过调用在运行时读取任意XML文件Resources.getXML() 。各种XML配置文件必须保存在这里,如搜索配置。

注意:不要保存资源文件内直接 RES /目录,它会导致一个编译错误。

对于某些类型的资源的有关信息,请参阅资源类型的文档。

在表1中定义的子目录保存的资源,你是你的“默认”的资源。也就是说,这些资源为您的应用程序定义默认的设计和内容。然而,不同类型的机器人供电设备可能要求不同类型的资源。例如,如果一个设备具有比普通屏幕更大,那么你应该提供不同的布局资源优势,采取额外的屏幕空间。或者,如果设备有不同的语言设置,然后你应该提供不同的字符串资源,在你的用户界面的文字翻译。提供这些不同的设备配置不同的资源,你需要提供替代资源,除了默认资源。

提供替代资源

图1。两个不同的设备,每次使用不同的布局资源。

几乎每一个应用程序应该提供替代的资源,以支持特定的设备配置。例如,你应该包括绘制的替代资源,为不同的屏幕密度和不同语言的替代字符串资源。在运行时,Android检测当前的设备配置,并为您的应用程序加载适当的资源。

要指定一组资源配置特定的替代品:

  1. 创建一个新目录的res /的形式命名<resources_name> - <config_qualifier>
    • <resources_name>是相应的默认资源(表1定义)的目录名称。
    • <qualifier>是一个名称,指定一个单独的配置,这些资源的使用(表2中定义)。

    您可以附加多个<qualifier>。每一个破折号分开。

    注意:多个预选赛附加时,你必须把它们在相同的顺序在它们在表2所列。如果预选赛排序错误,资源将被忽略。

  2. 在这个新的目录中保存各自的替代资源。资源文件必须命名为默认的资源文件完全一样。

例如,这里有一些默认和替代资源:

RES /    绘制/           的icon.png        background.png         绘制的hdpi /          的icon.png        background.png  

hdpi限定符表示该目录中的资源,是一个高密度的屏幕设备。这些绘制的每个目录中的图像是一个特定的屏幕密度的大小,但文件名 ​​完全相同。这样,您使用的资源ID引用的icon.pngbackground.png形象始终是相同的,但Android选择每个资源的版本,当前设备的最佳匹配,通过比较预选赛设备的配置信息资源目录的名称。

Android支持多种配置预选赛,您可以添加多个限定一个目录名,每一个破折号分开预选赛。表2列出了有效的配置预选赛,为了优先,如果您使用多个预选赛资源目录,你必须将它们添加到它们在表中列出的目录名的顺序。

表2。配置限定名称。

组态限定词值描述MCC和MNC例如:mcc310mcc310 mnc004mcc208 mnc00等 


移动国家代码(MCC),其次是可选设备中的SIM卡的移动网络代码(MNC)。例如,mcc310是美国对任何载体, mcc310 mnc004是美国在Verizon,和mcc208-mnc00是在法国Orange。

如果设备使用无线连接(GSM手机),中冶来自SIM卡,并从该设备连接到网络的跨国公司。

您还可以使用单独的MCC(例如,包括在您的应用程序中的特定国家的法律资源)。如果你需要指定仅语言的基础上,再使用的 语言和地区预选赛(下面讨论)。如果您决定使用的MCC和MNC预选赛,你应该这样做护理和测试,它按预期工作。

还可以看到配置领域的MCCMNC,这表明目前的移动国家代码和移动网络代码,分别。

语言和地区例子:EN FREN-RUS FR-RFRFR-RCA 等。 




语言是指由两个字母的ISO 639-1语言代码,可以由两个字母 的ISO 3166-1-α-2地区代码(小写字母“ R “的前面)。

代码是区分大小写 r 前缀用来区分该地区的部分。你不能单独指定一个区域。

如果用户改变他或她在系统设置中的语言,这期间可以改变你的应用程序的生命。请参阅有关如何这可能会影响您的应用程序在运行过程中的信息处理运行时更改。

看到定位为一个完整的指南,以本地化为其他语言的应用。

也看到了语言环境的配置领域,这表明当前的语言环境。

smallestWidthSW <N> DP

的例子:sw320dpsw600dpsw720dp 等。


基本尺寸的屏幕,显示可用的屏幕区域的最短尺寸。具体来说,“设备的smallestWidth,是最短的屏幕的高度和宽度(也可以认为它是”最小宽度“的画面)。你可以使用这个限定符来保证,无论当前屏幕的方向,您的应用程序至少有<N> DPS宽,它的UI。

例如,如果你的布局要求,屏幕面积最小的尺寸,在任何时候都至少有600 DP,然后你可以使用此qualifer创建布局资源,res/layout-sw600dp /。系统将使用这些资源,只有当最小的可用屏幕尺寸至少600dp,不论是否600dp一边是用户感知的高度或宽度。smallestWidth是固定屏幕大小的设备特性; 设备的smallestWidth,不改变屏幕的方向变化时

设备smallestWidth需要考虑屏幕的装饰品和系统UI。例如,如果设备有一些UI元素在屏幕上持续帐户为沿的smallestWidth的轴的空间,系统宣布smallestWidth是比实际的屏幕尺寸较小,因为这些都是不适合你的UI屏幕像素。因此,你使用的价值,应该是实际的最小尺寸布局的要求(通常情况下,这个值是“最小宽度”布局的支持,无论在屏幕的当前方向)。

一些值,你可以使用常见的屏幕尺寸:

  • 320,如屏幕配置的设备:
    • LDPI 240X320(QVGA的手机)
    • 320x480的MDPI(手机)
    • ,480X800 hdpi(高密度手机)
  • 480,屏幕为480X800,MDPI(片/手机)等。
  • 600,如600x1024,MDPI(7片)的屏幕。
  • 720,如720x1280,MDPI(10片)的屏幕。

当您的应用程序提供了多个不同的价值观为smallestWidth限定符资源目录,该系统采用一个最接近(不超过)设备的smallestWidth。

加入API 13级。

还可以看到机器人:属性,声明与您的应用程序是兼容的最低smallestWidth requiresSmallestWidthDp,的smallestScreenWidthDp配置字段,其中包含设备的smallestWidth价值。

对于不同的屏幕设计和使用此限定符的详细信息,请参阅支持多种屏幕开发指南。

可用宽度瓦特<N> DP

的例子:w720dpw1024dp 等。

指定最低可用屏幕宽度,DP单位资源所应使用定义<N>价值。这个配置值时,将改变方向改变,以符合当前的实际宽度的横向和纵向之间。

当您的应用程序提供多个资源目录与此配置的不同的价值观,该系统采用一个最接近(不超过)设备的当前屏幕宽度。这里的值需要考虑到屏幕上的装饰品,因此,如果设备有显示器的左或右边缘上的一些持久的UI元素,它使用的宽度,比真正的屏幕尺寸,这些UI元素的会计小的价值和减少应用程序的可用空间。

加入API 13级。

也看到screenWidthDp的 配置字段,其中包含当前屏幕宽度。

对于不同的屏幕设计和使用此限定符的详细信息,请参阅支持多种屏幕开发指南。

可用高度Ĥ<N> DP

的例子:h720dph1024dp 等。

指定最小可用屏幕高度,在“DP”的资源应定义台<N>价值。这个配置值时,将改变方向改变,以符合当前的实际高度的横向和纵向之间。

当您的应用程序提供多个资源目录与此配置的不同的价值观,该系统采用一个最接近(不超过)设备的当前屏幕高度。这里的值需要考虑到屏幕上的装饰品,所以如果设备有显示器的顶部或底部边缘上的一些持久的UI元素,它使用的高度,比真正的屏幕尺寸,占这些UI元素和小值减少应用程序的可用空间。屏幕是不固定的装饰品(如手机,可以全屏幕时隐藏状态栏)占这里,也不是像标题栏或行动起来吧,所以应用程序必须准备处理一个稍小的窗口装饰比他们指定的空间。

加入API 13级。

也看到screenHeightDp的 配置字段,其中包含当前屏幕宽度。

对于不同的屏幕设计和使用此限定符的详细信息,请参阅支持多种屏幕开发指南。

屏幕尺寸
正常

XLARGE
  • :一个低密度的QVGA屏幕,同样大小的屏幕。最低的一个小屏幕布局大小约为320x426 DP单位。例如QVGA低密度和高密度的VGA。
  • 正常:到中等密度的HVGA屏幕,同样大小的屏幕。最低为正常屏幕布局大小约为320x470 DP单位。这种屏幕的例子,一块WQVGA低密度的WVGA,HVGA的中密度,高密度。
  • 到中等密度的VGA屏幕,同样大小的屏幕。最低的一个大屏幕的布局大小约为480×640 DP单位。例子是VGA和WVGA中密度屏幕。
  • XLARGE:屏幕,大大高于传统的中密度HVGA屏幕较大。最低的布局的XLARGE屏幕的大小约为720x960 DP单位。在大多数情况下,具有超大屏幕的设备将是太大,携带在口袋里,最有可能是平板式设备。加入API级别9。

注:使用大小预选赛并不意味着资源,大小的屏幕。如果你不提供替代资源与预选赛,更好地匹配当前的设备配置,系统可能会使用为准资源的最佳匹配。

注意:如果所有的资源使用是大于当前屏幕 大小预选赛,系统将不会使用他们和您的应用程序在运行时会崩溃(例如,如果所有的布局资源与XLARGE预选赛标签,但该设备是一个正常大小的屏幕)。

加入API级别4。

支持多个屏幕,以获得更多信息。

也看到screenLayout的配置字段,这表明小,正常,或大屏幕是否是。

屏幕宽高比
notlong
  • :长的屏幕,如WQVGA,WVGA,FWVGA
  • notlong:屏幕的QVGA,HVGA,VGA,如不长,

加入API级别4。

这是基于纯粹的屏幕宽高比(“长”屏幕更宽)。这是不相关的屏幕方向。

还可以看到,这显示屏幕是否是长期的screenLayout配置领域。

屏幕方向端口
土地
  • 端口:设备是纵向(垂直)
  • 土地:设备在横向(水平)

这可以改变您的应用程序的生命过程中,如果用户旋转屏幕。处理运行时更改如何影响您的应用程序在运行过程中的信息。

还可以看到的方向配置的领域,这表明当前设备方向。

基座模式
办公桌
  • 汽车:设备是在汽车码头
  • 办公桌:设备是在办公桌码头

加入API级别8。

如果用户放置在被告席上的设备,这可以在您的应用程序的生命改变。您可以启用或禁用此模式使用UiModeManager。处理运行时更改如何影响您的应用程序在运行过程中的信息。

夜间模式晚上
notnight
  • 晚上:夜时间
  • notnight:一天时间

加入API级别8。

这可以在您的应用程序的生命改变,如果留在自动模式(默认)夜间模式,在这种情况下,模式的基础上,一天的时间变化。您可以启用或禁用此模式使用UiModeManager。处理运行时更改如何影响您的应用程序在运行过程中的信息。

屏幕像素密度(DPI)LDPI 
MDPI 
hdpi 
xhdpi 
nodpi 
tvdpi
  • LDPI:低密度屏幕,约120DPI。
  • MDPI:中等密度(传统的HVGA)的屏幕,约160dpi。
  • hdpi:高密度的屏幕,约240dpi。
  • 加入API等级8 xhdpi:额外的高密度显示屏,约320dpi。
  • nodpi:这可以使用位图资源,你不想被缩放匹配的器件密度。
  • tvdpi:屏介于MDPI和hdpi约213dpi。这不被视为“主”的密度组。它主要用于电视和大多数应用程序不应该需要它提供MDPI和hdpi资源,是足以满足大多数应用程序,系统将适当扩大。这个限定符介绍了API级别13。

有四个主要密度(忽略tvdpi密度)之间3:4:6:8的缩放比例。所以,LDPI 9X9点阵MDPI 12X12,24X24在hdpi和xhdpi 18x18的。

如果您决定您的图像资源不足够好看,电视或其他特定设备,并希望尝试tvdpi资源,比例因子为1.33 * MDPI。例如,MDPI屏幕是100px x为100px的形象应该是为133px x 133px tvdpi。

注:使用密度预选赛并不意味着资源用于该密度的屏幕。如果你不提供替代资源与预选赛,更好地匹配当前的设备配置,系统可能会使用为准资源的最佳匹配。

支持多个屏幕,如何处理不同的屏幕密度和Android是如何扩展你的位图,以适应电流密度的更多信息。

触摸屏类型notouch 
手写笔
手指
  • notouch:设备没有触摸屏。
  • 手写笔装置有电阻式触摸屏,对适合使用手写笔。
  • 手指:设备具有触摸屏。

也看到了触摸屏的配置领域,这表明在触摸屏上的设备类型。

键盘的可用性keysexposed 
keyshidden 
keyssoft
  • keysexposed:设备有键盘可用。如果设备有启用一个软件键盘(这是可能的),这可能会使用甚至硬件键盘时 向用户公开,即使设备没有硬件键盘。如果没有提供软件键盘或禁用它,那么这只能暴露时使用硬件键盘。
  • keyshidden:设备有硬件键盘,但它是隐藏的没有启用一个软件键盘 的设备。
  • keyssoft:设备启用一个软件键盘,无论是可见或不可见。

如果您提供keysexposed资源,但不是keyssoft 资源,系统使用keysexposed资源,无论键盘是否是可见的,只要该系统有一个软件键盘启用。

这可以改变您的应用程序的生命过程中,如果用户打开一个硬件键盘。处理运行时更改如何影响您的应用程序在运行过程中的信息。

还可以看到配置领域hardKeyboardHiddenkeyboardHidden,这表明硬件键盘的知名度和任何种类的键盘(包括软件)的知名度,分别。

主要文字输入法nokeys 
QWERTY 
12key
  • nokeys:设备有没有硬件键输入文字。
  • QWERTY:设备具有一个硬件QWERTY键盘,无论是对用户可见或不。
  • 12key:设备具有硬件12键键盘,无论是对用户可见或不。

还可以看到的,这表明主的文字输入法的键盘配置领域。

导航键的可用性navexposed 
navhidden
  • navexposed:导航键是提供给用户。
  • navhidden:导航键是不可用的(如一个封闭的盖子后面)。

这可以改变您的应用程序的生命过程中,如果用户发现导航键。处理运行时更改如何影响您的应用程序在运行过程中的信息。

也看到navigationHidden的配置字段,指示是否是隐藏的导航键。

主要的非接触式导航方法nonav 
DPAD 
轨迹球
  • nonav:设备有没有比使用触摸屏的导航设施。
  • 使用Dpad:设备具有定向导航垫(D-PAD)。
  • 轨迹球:设备有轨迹球导航。
  • 车轮:设备具有定向导航轮(少见)(S)。

也看到了导航配置领域,这表明可用类型的导航方法。

平台版本(API级别)例子:V3 V4V7 等。


API级别的设备支持。例如,V1 API级别1(与Android 1.0或更高版本的设备)  v4 API第4级(设备采用Android 1.6或更高)。看到Android API的水平有关这些值的详细信息的文件。

注意: Android 1.5和1.6只能配合这个限定符资源时,它完全匹配的平台版本。见下文已知问题的更多信息。

注:已加入一些配置预选赛,由于Android 1.0,所以并不是所有的Android版 ​​本支持所有的预选赛。使用隐含增加一个新的限定,使旧设备平台版本限定符是一定要忽略它。例如,使用w600dp预选赛将自动包括V13预选赛,因为可供宽度限定在API级别13。为了避免出现任何问题,总是有一个默认资源(资源与集没有限定)。欲了解更多信息,请参阅关于部分资源提供最佳的设备兼容性。

限定符的名称规则

下面是关于使用配置限定名的一些规则:

  • 你可以指定一个单一的资源集,由破折号分隔多个预选赛。例如,绘制-EN-RUS的土地适用于美国英语在横向的设备。
  • 预选赛必须在表2中列出的顺序。例如:
    • 错误:绘制的hdpi端口/
    • 正确:绘制端口,hdpi /
  • 不能嵌套替代资源目录。例如,你不能有 RES /绘制/绘制/ EN
  • 值是不区分大小写。资源编译器目录名转换为小写前处理,以避免不区分大小写的文件系统上的问题。任何资本中的名称是唯一受益的可读性。
  • 只有一个支持的每个预选赛类型的值是。例如,如果你想用西班牙和法国同绘制文件,你不能有一个名为目录 绘制-RES-RFR /。相反,你需要两个资源目录,如 绘制RES / / RFR绘制的,其中包含相应的文件。然而,你是不是需要重复相同的文件在这两个位置。相反,你可以创建一个别名资源。请参阅下面创建别名的资源。

替代资源保存到命名的目录,这些限定符之后,机器人会自动适用于基于当前设备配置的应用程序中的资源。每个请求资源时,Android的检查替代资源目录包 ​​含请求的资源文件,然后找到最佳匹配的资源(下面讨论)。如果没有匹配特定的设备配置的替代资源,那么Android将使用相应的默认资源(不包括配置限定特定资源类型的资源集)。

创建别名资源

当你有一个资源,你想使用一个以上的设备配置(但不希望提供一个默认的资源),你并不需要把相同的资源,在多个替代资源目录。相反,你可以(在某些情况下)建立一个替代的资源,它作为资源保存在您的默认的资源目录的别名。

注意:不是所有的资源提供了一种机制,通过它可以创建一个别名到另一个资源。特别是,动画,菜单,原材料,以及其他在不明资源XML /目录中不提供此功能。

例如,假设你有一个应用程序图标的icon.png,需要不同的语言环境,它的独特版本。然而,两种语言环境,英语加拿大和法国,加拿大,需要使用相同的版本。你可能会认为你需要英文加拿大和法国,加拿大的资源目录复制到相同的图像,但事实并非如此。相反,你可以节省这两个用作图像icon_ca.png(比其他的icon.png任何名义),在默认的res /绘制/目录。然后创建在文件icon.xml RES / 绘制-EN-RCA / 和 res /绘制-FR-RCAicon_ca.png 资源使用<bitmap>元素。这使您可以存储只有一个版本的PNG文件和两个小指向它的XML文件。(一个示例XML文件如下所示。)

绘制

要创建一个别名现有绘制,使用<bitmap>的的元素。例如:

<?XML      

如果你保存这个文件为icon.xml(替代资源目录,如 RES /绘制-EN-RCA /),它被编译成一个资源,你可以作为R.drawable.icon引用,但实际上是一个别名为R.drawable.icon_ca资源(这是在保存/ RES /绘制)。

布局

创建一个别名,以现有的布局,使用的<include> 元素,包裹在一个<merge>。例如:

<?XML版本= “1.0” 编码= “UTF-8” ?> <merge>     <包括 布局= “@布局/ main_ltr” /> </合并>

如果你保存这个文件main.xml中,它被编译成一个资源,你可以作为R.layout.main引用,但实际上是为一个别名R.layout.main_ltr 资源。

字符串和其他简单的值

现有字符串创建一个别名,只需使用所需的字符串作为新的字符串值的资源ID。例如:

<?XML          

R.string.hi资源是现在R.string.hello的别名。

其他简单的值相同的方式工作。例如,颜色:

<?XML          

资源,提供最佳的设备兼容性

为了使您的应用程序,以支持多个设备配置,这是非常重要的,你总是为每个类型的资源,您的应用程序使用的默认资源。

例如,如果您的应用程序支持多国语言,包括价值/目录(保存在你的字符串),没有一个语言和地区的预选赛。如果你,而不是把你所有的字符串文件的目录中,有语言和地区预选赛,那么你的应用程序将语言设置为您的字符串不支持的设备上运行时崩溃。但是,只要你提供默认 值/资源,那么你的应用程序将正常运行(即使用户不理解,语言,它比崩溃更好)。

同样,如果你提供不同的布局,根据屏幕方向的资源,你应该选择一个方向作为您的默认。例如,在布局资源布局的土地/景观和布局端口/肖像,而不是留下一个作为默认,如 布局/景观和布局端口/肖像。

提供默认资源不仅是重要的,因为你的应用程序可能运行在你没有预料到的配置,而且还因为新版本的Android有时添加配置的预选赛,旧版本不支持。如果使用1新资源预选赛,但保持代码的兼容性与旧版本的Android,然后当旧版本的Android运行您的应用程序,它会崩溃,如果你不没有提供默认的资源,因为它可以不使用新命名的资源预选赛。例如,如果您minSdkVersion 4,和你的资格所有使用您的绘制资源夜晚模式(夜间notnight,而进行的API等级8添加),然后1 API的级别4设备可以不访问您绘制的资源和将崩溃。在这种情况下,你可能想notnight是你的默认的资源,所以你应该排除预选赛,所以你绘制的资源在任一/绘制绘制夜/

因此,为了提供最好的设备兼容性,始终提供默认的资源,为您的应用程序需要执行正确的资源。然后创建使用的配置限定为特定的设备配置的替代资源。

此规则有一个例外:如果您应用的minSdkVersion,是大于或等于4, 你 不需要提供的默认绘制的资源,当你绘制的替代资源 屏幕密度预选赛。即使没有默认绘制的资源,Android可以找到替代的屏幕密度之间的最佳匹配,并根据需要缩放位图。然而,对于所有类型的设备的最好的经验,你应该提供所有这三种类型的密度替代的drawable。如果您minSdkVersion小于 4(的Android 1.5或更低),要知道,屏幕大小,密度,和方面预选赛不支持的Android 1.5或更低,因此您可能需要执行额外的兼容性,这些版本。

提供Android 1.5的屏幕资源的兼容性

的Andr​​oid 1.5(和更低)不支持以下配置qualifers:

密度
LDPIMDPI的LDPI,并nodpi的
屏幕尺寸
正常
屏幕宽高比
notlong的

这些配置限定在Android 1.6中引入,这样的Andr​​oid 1.5(API第3级)和较低的不支持。如果您使用这些配置预选赛和不提供相应的默认资源,然后在Android 1.5设备可能会使用屏幕配置与上述限定的名字命名的资源目录中的任何一个,因为它忽略了这些限定和用途为准,否则匹配绘制它找到的资源第一。

例如,如果您的应用程序支持Android 1.5和包括资源密度为每类型的绘制(绘制,绘制的MDPI / / LDPI绘制的LDPI /), 并不包括默认绘制的资源(/绘制),然后一个Android 1.5将使用的drawable,这可能会导致在一个用户界面,这是不太理想的替代资源目录中的任何一个。

因此,使用屏幕配置预选赛时的兼容性提供的Andr​​oid 1.5(或更低):

  1. 提供默认的资源,中密度,正常,和notlong屏幕。

    由于所有的Android 1.5设备有中等密度,正常的,不长的屏幕,你可以放置在相应的默认资源目录的各种资源。例如,把所有中密度绘制资源绘制/MDPI /绘制的,而不是),把正常的,在相应的默认资源目录的大小资源,和notlong相应的默认的资源目录中的资源。

  2. 确保您的SDK工具版本是R6或更高。

    你需要SDK工具,修订6(或更高),因为它包含了一个新的包装工具,可自动适用于一个合适的版本限定任何一个限定在Android 1.0不存在的名字命名的资源目录。例如,由于密度预选赛在Android 1.6(API第4级),包装工具时遇到一个资源目录使用密度预选赛介绍,它增加了V4目录名,以确保旧版本不使用这些资源(只API级别较高的支持限定符)。因此,您的中等密度的资源放在一个目录中没有MDPI预选赛中,他们仍然是Android 1.5的访问,任何设备,支援的密度qualifer和有中等密度的屏幕还使用了默认的资源(是MDPI)因为他们是最好的设备匹配(而不是LDPIhdpi 资源的使用)。

注:后来的版本,如Android的API级别8,引进其他配置预选赛,旧版本不支持。为了提供最佳的兼容性,你应该总是包括了一套默认的资源,为每个类型的资源,您的应用程序使用,如上所述,提供最佳的设备兼容性。

Android是如何找到最佳匹配的资源

当您要求为您提供替代的资源,Android的选择,在运行时使用替代资源,根据当前设备配置。为了证明Android是如何选择一个替代的资源,承担以下各包含不同版本的相同的图像的绘制目录:

绘制/绘制-EN /绘制-FR-RCA /绘制恩端口/绘制-EN-notouch 12key /绘制端口LDPI /绘制端口,notouch 12key /

并承担以下是设备配置:

LOCALE = EN-GB 
屏幕方向= 端口 
屏幕像素密度= hdpi 
触摸屏类型= notouch 
小学文本输入法= 12key

Android的设备配置,通过比较可替代资源,选择的drawable从绘制恩端口

到达系统在决定资源使用下面的逻辑:

图2。流程图Android是如何找到最佳匹配的资源。

  1. 消除矛盾设备配置的资源文件。

    绘制-FR-RCA /目录中被淘汰,因为它违背了EN-GB的语言环境。

    绘制/绘制-EN /绘制-FR-RCA /绘制恩端口/绘制-EN-notouch 12key /绘制端口LDPI /绘制端口,notouch 12key /

    例外:屏幕像素密度是一个预选赛,由于矛盾没有消除。即使设备屏幕密度是hdpi的的, 绘制的端口,LDPI /没有消除,因为每一个屏幕密度被认为是在这一点上的比赛。更多的信息是在文件支持多屏幕。

  2. 选取清单中的最高优先级预选赛(下)(见表2)。(与MCC开始,然后向下移动。)
  3. 任何资源目录包括这个限定符呢?
    • 如果没有,返回第2步,并期待在未来的预选赛。(在这个例子中,答案是“没有”,直到达到语言限定符。)
    • 如果是,继续进行步骤4。
  4. 消除资源目录,不包括这个限定符。在这个例子中,该系统消除了所有的目录,不包括语言限定符:
    绘制/绘制-EN /绘制恩端口/绘制-EN-notouch 12key /绘制端口LDPI / 绘制端口,notouch 12key /

    例外:如果有问题的限定符是屏幕像素密度,Android的选择设备的屏幕密度最接近的选项。在一般情况下,机器人宁愿缩减到了一个较小的原始图像缩放较大的原始图像。支持多个屏幕。

  5. 回去,并重复步骤2,3和4,直到只有一个目录仍然存在。在这个例子中,屏幕方向是未来的预选赛,其中有任何比赛。所以被淘汰,不指定屏幕方向的资源:
    绘制-EN /绘制恩端口/绘制-EN-notouch 12key /

    其余的目录是绘制恩端口

虽然这个过程是执行每个请求的资源,进一步优化系统的某些方面。这样的优化之一是,一旦设备配置而闻名,它可能消除替代的资源不能比拟的。例如,如果配置的语言是英语(“EN”),那么任何资源目录,有一个语言限定符设置为英语以外的东西是永远不会包括在检查资源池(虽然仍然是一个资源目录没有语言限定符包括在内)。

当选择屏幕上的大小限定为基础的资源,系统将使用屏幕小于当前屏幕设计的资源,如果没有更好的匹配(例如,一个大尺寸的屏幕将使用正常大小的屏幕资源,如果有必要的资源)。但是,如果只可用资源 大于当前屏幕,系统将 不会使用他们和您的应用程序会崩溃,如果没有其他的资源相匹配的设备配置(例如,如果所有的资源布局的标签与XLARGE预选赛,但在设备是一个正常大小的屏幕)。

注:优先级限定符(表2),比预选赛完全匹配的设备数量更重要。例如,在上述步骤4,名单上的最后的选择包括三个完全匹配的设备(方向,触摸屏类型,并输入法)的预选赛,而绘制恩只有一个参数,匹配(语言)。然而,语言有更高的优先级比其他这些预选赛,所以 绘制端口notouch的12key是。

要了解更多有关如何使用您的应用程序中的资源,继续访问资源。

已知问题

Android 1.5和1.6版本预选赛进行精确匹配,而不是最佳匹配

正确的做法是系统匹配带有标记的资源等于或小于设备上的平台版本的版本预选赛,但在Android 1.5和1.6,(API级别3和4),有一个错误,导致系统匹配版本预选赛标记的资源,只有当它完全匹配设备上的版本。

解决方法:为了提供特定版本的资源,遵守此行为。然而,因为这个错误是固定的可用版本的Android 1.6后,如果您需要区分的Android 1.5,1.6和更高版本的资源,那么你只需要申请的版本限定1.6资源和一个匹配所有版本。因此,这实际上是一个非问题。

例如,如果您想绘制的资源,是每个Android 1.5,1.6,2.0.1(及以后)的不同,创建三个绘制目录:绘制/(1.5和更低), 绘制-V4(1.6),绘制-V6(2.0.1及以后版本2.0,V5,不再可用)。

↑返回顶部

←返回到应用程序资源