`

android ids.xml

 
阅读更多

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——当中定义使用到的字符串常量。

 

 

前面我们见识过ids.xml文件,但是这个文件是什么意思呢?我们来看下文档中的介绍:
先看下它给的例子:
XML file saved at res/values/ids.xml:
使用方式:
   
   
一: 
二:Button btn=new  Button(context);  btn .setId(context.getResources().getInteger(R.id.button_ok));
红色部分的书写形式是不正确的,我们直接使用btn.setId(R.id.button_ok);就OK,如果用红色部分的话就会报一个无法找见资源的错误.
使用这两种方式都是可以的,如果我们用了ids.xml我们就有以下的几个好处:
1.命名方便,我们可以把一些特定的控件先命好名,我们在使用的时候直接在我们的布局中设置id,省去了一个命名环节。
2.在我们写代码布局的时候,我们在设置ID的时候,我们就需要使用这种方式为我们的控件来命名了,在查找的时候它就可以去R文件中查找相应的ID,然后进行转换。
注意:在ids.xml中的每一项目也会生成成到R文件中的,如我们上面的ids.xml在我们的R文件中会生成下面的对照:
 public static final class id {
        public static final int button_ok=0x7f080000;
        public static final int dialog_exit=0x7f080001;
我们在使用的时候,不管哪种方式设置的id,都是一样的:
findViewById(R.id.xxx);
分享到:
评论

相关推荐

    Auto generate ids.xml and public.xml

    标题“Auto generate ids.xml and public.xml”涉及到的是Android开发中的一个重要环节,即自动创建和管理资源ID。在Android应用开发中,每个XML资源文件(如布局、字符串、颜色等)都会在编译时生成对应的`ids.xml`...

    Android--UI-新手必备源码master.zip

    │ │ ids.xml │ │ strings.xml │ │ styles.xml │ │ │ ├─art │ │ attrs.png │ │ demo1.gif │ │ demo2.gif │ │ icon.png │ │ Thumbs.db │ │ │ ├─gradle │ │ └─wrapper ...

    AndroidXML反编译神器工具使用说明

    AndroidXML反编译神器工具使用说明 1.先下载APK。 2.必须配好JAVA环境变量 3.现在反编译工具,比如XP系统32位和WIN7系统32位选择Android_decompilation.exe,WIN7系统64位选择Android反编译工具(64位).exe 4.选择后...

    Android中修改资源ID值

    - 手动修改:打开`res`目录下的`values`文件夹,找到`ids.xml`文件(如果不存在,可以创建一个)。在这个XML文件中,你可以添加、删除或修改ID定义。例如: ``` ``` 要修改ID,只需更改`name`属性的值。 ...

    Android的widget使用listview布局

    首先,为了创建一个包含ListView的Android Widget,我们需要在`res/xml`目录下创建一个新的XML布局文件,例如`widget_list_view.xml`。在这个文件中,定义一个ListView作为根元素,并设置相应的属性,如ID和样式: ...

    Android ViewFlipper的简单使用

    在Android开发中,ViewFlipper是一个非常实用的控件,它可以用来展示多个视图并实现视图之间的动态切换,通常用于实现类似轮播图或者页面切换的效果。本文将详细介绍如何在Android项目中使用ViewFlipper,包括基本的...

    scanAndroidUnUseResouce:扫描android项目里面没有使用的资源文件

    scanAndroidUnUseResouce 扫描android项目里面没有使用的资源文件 使用场景:扫描项目下没用的资源 ...4,其中可能需要手动调整 res/values/string.xml 和 ids.xml 文件看看格式是否正确 把该脚本放在 后续在完善

    android-wheel-datepicker:android 的轮日期选择器控件(基于 android-wheel 控件 - https

    Android 轮日期选择器 这是基于项目的控件。 特征 最小-最大年份设置 ...将下一个 id 添加到您的 ids.xml 文件中: 将自定义视图添加到您的布局并在活动代码中进行配置,如下所示: WheelDat

    Android 桌面显示今天日期源码.zip

    - 如果需要访问系统日期或时间,需要在`AndroidManifest.xml`中声明`android.permission.ACCESS_FINE_LOCATION`或`android.permission.ACCESS_COARSE_LOCATION`权限,因为从Android 6.0(API级别23)开始,这些权限...

    详解Android获取设备唯一ID的几种方式

    protected static final String PREFS_FILE = "device_id.xml"; protected static final String PREFS_DEVICE_ID = "device_id"; protected static volatile UUID uuid; public DeviceUuidFactory(Context ...

    Android利用GCM推送消息

    在Android开发中,Google Cloud Messaging(GCM)是Google提供的一种免费的服务,允许开发者通过服务器向Android设备发送消息,实现远程消息推送。本教程将详细讲解如何在Android应用中利用GCM实现消息推送,并结合...

    Android自定义TitleView标题开发实例

    Android开发过程中,经常遇到一个项目需要重复的定义相同样式的标题栏,Android相继推出了actionBar, toolBar, 相信有用到的朋友也会遇到一些不如意的时候,比如标题栏居中时,需要自定义xml文件给toolBar等,不了解...

    AndroidWidget电池插件

    android:resource="@xml/new_battery_widget_info" /&gt; ``` 现在,创建`NewBatteryWidgetProvider.java`,继承自`AppWidgetProvider`。在这个类中,你需要重写`onUpdate()`方法,这是当Widget需要更新时系统调用的...

    自己总结的Android 开发规范文档

    9. **资源 ID**(Resource IDs): - 采用小驼峰命名法。 - 示例:`txtUsername`、`imgLogo`。 10. **布局文件名**(Layout Files): - 全部小写,下划线分隔。 - 示例:`activity_login.xml`、`dialog_alert....

    processing-google-play-game-services-sample:Processing-Android with Google Play Game Services Sample

    修改res/values/ids.xml,列出2中得到的ID。 修改 project.properties 以定义 google-play-services_lib 的相对路径 libs/processing-core.jar.dummy 中放置了一个虚拟文件,因此将其替换为processing-core.jar。 ...

    net.kibotu.android.error.tracking:gh页的Android错误跟踪

    通过复制/粘贴/jar/error-tracking-lib.jar或将其包含到您的maven pom.xml中。 将Parse.com Android库添加到您的项目中。 初始化错误跟踪库: ErrorTracking.startSession(this, applicationId, clientKey); // ...

    android gcm

    5. **服务器端集成**:了解如何在服务器端使用Google提供的API发送推送消息,通常需要API密钥和registration IDs。 6. **消息格式**:理解GCM支持的消息格式,包括简单的文本消息和包含额外数据的JSON消息。 7. **...

    PL2303 usb转串口 com android 源码 完全可用

    5. **Android权限管理**:在AndroidManifest.xml中添加相应的USB访问权限,如`&lt;uses-permission android:name="android.permission.ACCESS_USB" /&gt;`。 6. **设备识别与枚举**:在Android设备上,需要正确识别和枚举...

    Android中@id和@+id及@android:id的区别介绍

    `@android:id`是Android系统预定义的一组ID,它们位于SDK的特定路径下(通常是`res/values/ids.xml`)。这些ID主要用于系统组件和特性,如TabHost。使用`@android:id/tabhost`表示你正在引用系统提供的TabHost ID。...

    android PackageManagerService源码分析

    这一过程涉及到将底层的`userids`和`groupids`映射到上层的权限,同时为特定用户分配权限,以及加载系统所需的扩展库和硬件特性的定义。解析的结果被存储在多个集合中,如`mSystemPermissions`, `mSharedLibraries`,...

Global site tag (gtag.js) - Google Analytics