Android 资源加载机制详解

编程入门 行业动态 更新时间:2024-10-06 14:36:21

Android 资源加载机制<a href=https://www.elefans.com/category/jswz/34/1770044.html style=详解"/>

Android 资源加载机制详解

Android提供了一种非常灵活的资源系统,可以根据不同的条件提供可替代资源。因此,系统基于很少的改造就能支持新特性,比如Android N中的分屏模式。这也是Android强大部分之一。本文主要讲述Android资源系统的实现原理,以及在应用开发中需要注意的事项。

一、定义资源

Android使用XML文件描述各种资源,包括字符串、颜色、尺寸、主题、布局、甚至是图片(selector,layer-list)。

资源可分为两部分,一部分是属性,另一部分是值。对于android:text="hello,world"text就是属性,hello,world就是值。

1. 属性的定义

在APK程序中,属性定义在res/values/attrs.xml中,在系统中属性位于framework/base/core/res/res/values/attrs.xml文件中。具体定义如下所示:

<declare-styleable name="Window"><attr name="windowBackground" format="reference"/><attr name="windowContentOverlaly" /><attr name="windowFrame" /><attr name="windowTitle" />
</declare-styleable>

styleable相当于一个属性集合,其在R.java文件中对应一个int[]数组,aapt为styleable中的每个attr(属性)分配一个id值,int[]中的每个id对应着styleable中的每一个attr。

对于<declare-styleable name="Window">,Window相当于属性集合的名称。
对于<attr name="windowBackground">,windowBackground相当于属性的名称;属性名称在应用程序范围内必须唯一,既无论定义几个资源文件,无论定义几个styleable,windowBackground必须唯一。

在Java代码中,变量在一个作用域内只能声明一次,但可以多次使用。attr也是一样,只能声明一次,但可以多处引用。如上代码所示,在Window中声明了一个名为windowBackground的attr,在Window中引用了一个名为windowTitle的attr

如果一个attr后面仅仅有一个name,那么这就是引用;如果不光有name还有format那就是声明。windowBackground是属性的声明,其不能在其他styleable中再次声明;windowTitle则是属性的引用,其声明是在别的styleable中。

2. 值的定义

常见的值一般有以下几种:

  • String,Color,boolean,int类型:在res/values/xxx.xml文件中指定
  • Drawable类型:在res/drawable/xxx中指定
  • layout(布局):在res/layout/xxx.xml中指定
  • style(样式):在res/values/xxx.xml中指定

值的类型大致分为两类,一类是基本类型,一类是引用类型;对于int,boolean等类型在声明属性时使用如下方式:
<attr name="width" format="integer"/>
<attr name="text" format="string" />
<attr name="centerInParent"="boolean"/>
对于Drawable,layout等类型在声明属性时:
<attr name="background" format="reference"/>

二、解析资源

资源解析主要涉及到两个类,一个是AttributeSet,另一个是TypedArray。

1. AttributeSet

该类位于android.util.AttributeSet,纯粹是一个辅助类,当从XML文件解析时会返回AttributeSet对象,该对象包含了解析元素的所有属性及属性值。并且在解析的属性名称与attrs.xml中定义的属性名称之间建立联系。AttributeSet还提供了一组API接口从而可以方便的根据attrs.xml中已有的名称获取相应的值。

如果使用一般的XML解析工具,则可以通过类似getElementById()等方法获取属性的名称和属性值,然而这样并没有在获取的属性名称与attrs.xml定义的属性名称之间建立联系。

Attribute对象一般作为View的构造函数的参数传递过来,例如:

publlic TextView(Context context,AttributeSet attrs,int

更多推荐

Android 资源加载机制详解

本文发布于:2024-02-28 05:03:02,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768124.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:详解   加载   机制   资源   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!