Android官方文档学习-应用资源

概述

资源类型

在项目res/目录中支持的资源目录。

目录说明
animator/定义属性动画的 XML 文件。
anim/定义渐变动画的XML文件。(属性动画的XML在改目录中也会生效,因此,属性动画的XML文件应该优先存放于animator中,以便区分。)
color/定义颜色状态的 XML 文件。
drawable/位图文件(.png、.9.png、.jpg、.gif)或编译为以下可绘制对象资源子类型的 XML 文件:位图文件、九宫格(可调整大小的位图)、状态列表、形状、动画可绘制对象、、其他可绘制对象。
mipmap/适用于不同启动器图标密度的可绘制对象文件。
layout/用于定义用户界面布局的 XML 文件。
menu/用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。
raw/需以原始形式保存的任意文件。
values/定义字符串、整型数和颜色等简单值的 XML 文件。
xml/可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。
font/带有扩展名的字体文件(如 .ttf、.otf 或 .ttc),或包含 <font-family> 元素的 XML 文件。

注:

  • 存放于raw/下的资源,如要使用原始 InputStream 打开,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。
  • assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。
  • 其他 res/ 子目录中的 XML 资源文件会根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。
  • 资源文件不能直接保存在 res/ 目录内,因为这样会造成编译错误。

备用资源

根据特定配置和地区的设备指定不同的资源文件,Android 会检测当前设备配置并为应用加载合适的资源。例如,可以指定屏幕的横向和竖向加载不同的layout文件。

https://developer.android.google.cn/images/resources/resource_devices_diagram2.png

在 res/ 中创建以 <resources_name>-<config_qualifier> 形式命名的新目录。

  • <resources_name> 是相应默认资源的目录名称。
  • <config_qualifier> 是指定要使用这些资源的各个配置的名称。
res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

注:

  • 可以为单组资源指定多个限定符,并使用短划线分隔,这些限定符必须遵循官网中列出的顺序。
  • 不能嵌套备用资源目录。例如,目录不能为 res/drawable/drawable-en/。
  • 值不区分大小写。
  • 每种限定符类型仅支持一个值。例如,若要对西班牙语和法语使用相同的可绘制对象文件,不能拥有名为 drawable-rES-rFR/ 的目录,而是需要两个包含相应文件的资源目录,如 drawable-rES/ 和 drawable-rFR/。

别名资源

图像

假设有一个应用图标 icon.png,加拿大英语和加拿大法语这两种语言区域都需使用这个图标的同一版本,则可以将用于二者的图像保存为 icon_ca.png(除 icon.png 以外的任何名称),并将其放入默认的 res/drawable/ 目录中。然后,在 res/drawable-en-rCA/ 和 res/drawable-fr-rCA/ 中创建 icon.xml 文件,使用 <bitmap> 元素引用 icon_ca.png 资源。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

布局

使用 <merge><include> 元素。

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

如果将此文件保存为 main.xml,则系统会将其编译到可作为 R.layout.main 引用的资源中,但该文件实际是 R.layout.main_ltr 资源的别名。

字符串和其他简单值

如要创建指向现有字符串的别名,只需将所需字符串的资源 ID 用作新字符串的值。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello</string>
    <string name="hi">@string/hello</string>
</resources>

访问资源

在代码中访问资源

以下是在代码中引用资源的语法:

[<package_name>.]R.<resource_type>.<resource_name>
  • <package_name> 是资源所在包的名称(如果引用的资源来自您自己的资源包,则不需要)。
  • <resource_type> 是资源类型的 R 子类。
  • <resource_name> 是不带扩展名的资源文件名,或 XML 元素中的 android:name 属性值(若资源是简单值)。

注意:切勿手动修改 R.java 文件 — 在编译项目时,aapt 工具会生成该文件。下次编译时,所有更改都会被覆盖。

在 XML 中访问资源

以下是在 XML 资源中引用资源的语法:

@[<package_name>:]<resource_type>/<resource_name>
  • <package_name> 是资源所在包的名称(如果引用的资源来自相同资源包,则不需要)。
  • <resource_type> 是资源类型的 R 子类。
  • <resource_name> 是不带扩展名的资源文件名,或 XML 元素中的 android:name 属性值(若资源是简单值)。

访问平台资源

Android 包含许多标准资源,例如样式、主题背景和布局。如要访问这些资源,请通过 android 包名称限定资源引用。

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

Android 是如何匹配资源的

Android 根据当前的设备配置,并按照官方文档中限定的顺序进行备用资源的匹配,如果未找到。这时应用将使用默认资源,如果没有默认资源,则报错。如有以下目录:

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

设备配置如下:

语言区域 = en-GB
屏幕方向 = port
屏幕像素密度 = hdpi
触摸屏类型 = notouch
主要文本输入法 = 12key

最终会选择:

drawable-en-port/

应用配置变更

当应用配置发生变化时,Android系统会重新启动正在运行的Activity,通过这种方式,使得应用可以加载相应的备用资源来更新Activity(这个更新过程,会调用onDestroy()与onCreate()方法),Activity的状态、数据会被销毁,因此需要我们自行保存数据。

onSaveInstanceState()和onRestoreInstanceState()

在Activity因为配置发生销毁时,会先调用onSaveInstanceState()方法,该方法将保存一个Bundle以便在重启时恢复数据,而onRestoreInstanceState()只有在存在保存状态的情况下才会被调用,因此不需要检查是否Bundle为空。Bundle并非用于携带大量数据对象,因为其中的数据必须依次在主线程中进行序列化和反序列化,而这可能会消耗大量内存并降低配置变更的速度。

ViewModel对象

Activity进行重建的时候,ViewModel的数据不会被回收调用。这时候我们就可以不用通过onSaveInstanceState()方法来进行数据的存储了。而且用onSaveInstanceState()方法为了使Activity能够尽快的重建还只能存储少量的数据进行恢复。

自行处理重建情况

通过在 AndroidManifest.xml 文件的 <activity> 标签中添加android:configChanges属性可以阻止系统重建Activity。其属性值有:

  • orientation:在屏幕方向发生变更时阻止重启。
  • screenSize:在屏幕方向发生变更时阻止重启。但仅适用于 Android 3.2(API 级别 13)及以上版本的系统。若想在应用中手动处理配置变更,必须在 android:configChanges 属性中声明 “orientation” 和 “screenSize” 值。
  • keyboardHidden:在键盘可用性发生变更时阻止重启。

多个配置值,用管道 | 字符将其进行分隔。

***注:***自行处理配置变更可能会提高使用备用资源的难度,因为系统不会为您自动应用这些资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android学习文档 1 一、Android前言 3 1、Android发展历程 3 2、Android发展前景 8 3、Android 应用领域 9 二、准备工作 11 1、 Android开发环境搭建 11 1.1 第一种搭建Android的开发环境步骤: 12 1.2 第二种搭建Android的开发环境步骤: 12 2、AVD设备(模拟器) 13 3、Android的模拟器Emulator 14 4、DDMS调试 14 5、Android开发需知 14 5.1 Android目录结构 14 5.2 UI控件: 15 5.3 应用程序权限 15 6、第一个android应用程序 15 7、Android组件介绍 20 三、Android应用程序架构分析 21 1、Android布局组件介绍及其实例分析 21 2.1 布局组件概述 21 2.1.1 五大布局: 21 2.1.2 属性: 21 2.1.3 常用的长度单位解析: 21 2.2 线性布局 22 2.3 表格布局 22 2.4 相对布局 23 2.5 基本界面组件 23 2、Activity生命周期及其实例分析 24 1.1 Avtivity介绍 24 1.2 Activity的生命周期 25 1.2.1 Activity的三种状态 25 1.2.2 Activity在三种状态切换时调用的方法(7种) 25 1.2.3 Activity跳转与布局管理器 27 1.2.4 Activity中与跳转相关的方法 28 1.2.5 Activity的内部切换界面 28 1.2.6 Activity的用法 28 1.3 Avtivity的回调机制 28 四、事件处理机制 29 1、事件效果 29 2、事件监听器的处理模型 30 3、监听器的事件处理模型步骤 31 4、事件监听器必须实现事件监听器接口 31 5、实现事件监听器 31 6、基于回调的事件处理 32 7、基于回调的事件传播 32 五、 Android数据存储 32 1、android的数据存储 32 2、如何在android中使用SQlite数据库? 33 2.1 使用SharedPreferences 33 2.2 练习使用SharedPreferences 33 3、要读写其他应用的SharedPreferences怎么做? 33 六、 Json数据格式解析和xml解析 34 1、JSON简介 34 2、Gson介绍 34 3、JSON与XML 34 4、Android中对xml的解析 35 4.1 学习json数据格式,编写xml文件转化成实体bean的工具类 35 1.先写一个工具类,把list集合转化成xml格式,注意支持各种类型 35 分析:用dom4j来操作 35 2.涉及的知识 35 五、开发中会用到的技术 36 1、Selector技术 36 2、Tosat显示消息提示框技术 36 3、Handler消息传递机制 36 4、Handler类的主要作用 37 六、Android实例 38 1、做多米播放器的特效 38 2、做时钟的特效 39 1. 涉及的知识 40 一、完成”时钟”应用程序的操作 43 七、图形与图像处理 44

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值