`

转:android项目中values中几个文件的作用

 
阅读更多

最近反编译了几个Android软件,发现一些以前未用到的资源文件:
ids.xml——为应用的相关资源提供唯一的资源id。id是为了获得xml中的对象而需要的参数,也就是Object = findViewById(R.id.id_name)中的id_name。这些值可以在代码中用android.R.id引用到。
若在ids.xml中定义了ID,则在layout中可如下定义@id/price_edit,否则@+id/price_edit。

为什么使用ids?
我个人认为有以下几点作用:
(1)优化编译效率。
我们知道android的组件必须用一个int类型的id属性来标识其唯一性,
id属性必须以@开头的值,例如,@id/abc、@+id/xyz等。
如果使用"@+id/name"形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识。如果不存在该变量,则添加一个新的变量,并为该变量赋相应的值(不会重复)。
当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。

使用@id/name形式,预先定义的id已经生成,修改配置文件时,也不会引起系统重新生成。

(2)统一管理资源Id。

public.xml——描述的是为attr、id、drawable所指定的一个32的id值,这个值在current.xml文件中会被用到。

当我们对public.xml做了改动后,执行make update-api命令,相应的current.xml就会添加这些改动。

在public.xml中资源数据的定义会影响到current.xml文件,它们分别在frameworks/asecoreesesvalues和framework/aseapicurrent.xml中。

当进行内核文件修改时,需要特别注意public.xml文件的同步,该文档定义了资源文件的二进制兼容性。因此需要小心对待该文件,否则可能会破坏该版本的向后兼容性。

  为了避免破坏兼容性,新的资源需加在同类资源的最后(主要ID值,按照ID值递增)。若是放置在中间会导致随后的同类资源被赋予新的ID值从而破坏兼容性。

添加id的方法:

1)在ids.xml中添加公共id项,在public.xml中也添加相应的id项。这种办法没有兼容性,会与后面的版本产生冲突。

2)在ids.xml中添加公共id项,每一项前面加一行<!– @hide –>的注释,这样就不用在public.xml中添加相应的项了。源码中是的形式,这样current中就不会有相应的段了。

3)在自己写的xml中,使用android:id = “@+id/id_name”的形式,就和在eclipse中一样,搜一下会发现android源码中也有这么用的,这样ids.xml和public.xml都不用改,兼容性我还不确定。

其它常用的资源文件:

attrs.xml——当中定义的是类的属性,属性是为了能在xml文件中被引用到,换句话说就是指定类中变量(也就是属性的实际作用者)的值。这些属性会在类的构造函数中用到。看过一两个源码就会明白,构造函数中的TypedArray其实就是属性的数组,数组的成员会被赋给类里的成员,完成从xml的初始化。类的构造函数一般有三个,一个是Class(context),这个用于在代码中创建一个类,所以只包含一个上下文;Class(context, attrs)和Class(context, attrs, defStyle)用于从xml创建类的情况。

styles.xml——当中是各个控件的“样式”,样式由一个个属性所组成。我们在编辑xml文件的时候,不同的类所能设置的属性有共同的,也有不同的,都是由样式来控制的。具体可以去看styles.xml这个文件的内容。
themes.xml其实也是样式,只是适用的范围大一点,这个我是参考网上别人的看法,自己还没研究过。

colors.xml——当中定义各种颜色值。

strings.xml——当中定义使用到的字符串常量。

分享到:
评论

相关推荐

    Android dimens.xml 不同分辨率生成

    Android 工程里面values文件夹有dimens.xml文件,为了适配不同的分辨率,例如values-sw400dp,values-sw600dp,values-sw720dp,如果自己去生成这几个文件夹,需要根据values里面的dimens.xml进行计算,然后修改,这个...

    新版Android开发教程.rar

    Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...

    Android插件框架Android-Plugin-Framework.zip

    具体public.xml如何编写,可参考PluginMain/res/values/public.xml 以及 PluginTest/res/values/public.xml俩个文件,它们是分别用来固定宿主程序和插件程序资源id的范围的。 4、插件apk的Context 构造一个...

    APKTool批处理版l

    在values文件夹下的文件: 一般来说,汉化需要处理是arrays.xml和strings.xml这两个文件。如何判断哪些是需要我们翻译的词条呢?有三种方法,综合起来一般就差不离了: 第一个当然是在使用软件中界面出现的词条,这...

    8941-Android智能手机编程.docx

    在Android项目中,在res目录下存放字符串信息的文件是( )。 A. strings.xml B. values.xml C. colors.xml D. const.xml 第7题. 在Activity中,( )方法在初始化的时候调用。 A. onCreate() B. onStart() C. ...

    android多语言

    我们知道,Android的国际化需要在values那里做折腾,多配置几个string文件,结合Resources和Configuration等。礼拜天闲来无事,折腾一个Demo出来。 http://www.jianshu.com/p/ca7ea2e3b380

    navigationbar.zip

    Android 8.1实现底部虚拟按钮NavigationBar的点击隐藏与滑动显示整个过程需要修改的完整代码,包含下面几个完整文件。 frameworks/base/packages/SystemUI/res/values-sw372dp/config.xml frameworks/base/packages/...

    理解Android中的自定义属性

    本文实例讲解了Android中的自定义属性,具体内容如下 1、引言 对于自定义属性,大家肯定都不陌生,遵循以下几步,就可以实现: 自定义一个CustomView(extends View )类 编写values/attrs.xml,在其中编写styleable...

    Android 快速搭建FTP服务器的方法

    在values文件夹下新建的xml文件,方便在代码中的引用,这些在网上也都可以很方便的找到,主要需要注意的就是末尾的换行符不可少,忘记带上可就会少你好几根头发的哦….. 3.启动我们的ftp服务 一、首先就是在sd卡中...

    如何正确实现Android启动屏画面的方法(避免白屏)

    演示分为以下几个步骤: 在res/drawable文件夹中创建splash_background.xml文件。 编辑res/values/styles.xml 创建java/…/SplashActivity 编辑manifests/AndroidManifest.xml 1、在res/drawable文件夹中创建...

    transdroider

    跨行者几个Python脚本:一个用于从Android项目中的每个strings.xml文件创建MS Excel书籍的脚本。 其他用于从MS Excel书籍中创建所有res / values-xx结构和strings.xml文件。 对于那些不使用xliff或gettext的人......

    Android自定义可左右滑动和点击的折线图

    前言  前几天有小盆友让我写一个折线图,可以点击,可以左右滑动。对于折线肯定有很多项目都使用过,所以网上肯定也有很多...确定所需要的自定义view的属性,然后在res/values目录下,新建一个attrs.xml文件,代码如

    lydia:车载安卓前端

    注册并获取密钥后,您需要编辑“keys.example.xml”文件并将其重命名为“/res/values”文件夹中的“keys.xml”。 如果您希望导航正常工作,首先是 Google。 转到 API 控制台 在“服务”选项卡下,您需要启用...

    【05-面向对象(下)】

    •不可变的类要满足以下几个条件:  –1.使用private和final修饰符来修饰该类的属性  –2.提供带参数的构造器,用于根据传入参数来初始化类里的属性  –3.仅为该类的属性提供getter方法,不要为该类的属性提供...

Global site tag (gtag.js) - Google Analytics