Android编程中@id和@+id的区别分析

软件编程 Android 分类:[default] 更新日期: 2015-12-18
这篇文章主要介绍了Android编程中@id和@+id的区别,较为详细的分析讲述了Android中资源引入的原理及使用@id和@+id引入资源的具体用法,总结了二者的区别,需要的朋友可以参考下

本文分析了Android编程中@id和@+id的区别。分享给大家供大家参考,具体如下:

Android中的组件需要用一个int类型的值来表示,这个值就是组件标签中的id属性值。

id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc、@+id/xyz等。

如果在@后面使用“+”,表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量。变量名就是“/”后面的值,例如,@+id/xyz会在R.java文件中生成int xyz = value,其中value是一个十六进制的数。如果xyz在R.java中已经存在同名的变量,就不再生成新的变量,而该组件会使用这个已存在的变量的值。

既然组件的id属性是一个资源id就可以,那么自然可以设置任何已经存在的资源id值,例如,@drawable/icon、@string/ok、@+string/you等。也可以设置android系统中已存在的资源id,例如@id/android:list,那么,这个android是什么意思呢,实际上,这个android就是系统的R类(在R.java文件中)所在的package。

我们可以在Java代码编辑区输入android.R.id.,就会列出相应的资源id,例如,也可以设置id属性值为@id/android:message。

还有另外一种方法查看系统中定义的id,进入sdk/platforms/android-16/data/res/values目录,ids.xml文件;

<?xml version="1.0" encoding="utf-8"?>
<!--
**
** Copyright 2007, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**   http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<resources>
 <item type="id" name="background" />
 <item type="id" name="checkbox" />
 <item type="id" name="content" />
 <item type="id" name="empty" />
 <item type="id" name="hint" />
 <item type="id" name="icon" />
 <item type="id" name="icon1" />
 <item type="id" name="icon2" />
 <item type="id" name="input" />
 <item type="id" name="left_icon" />
 <item type="id" name="list" />
 <item type="id" name="menu" />
 <item type="id" name="message" />
 <item type="id" name="primary" />
 <item type="id" name="progress" />
 <item type="id" name="right_icon" />
 <item type="id" name="summary" />
 <item type="id" name="selectedIcon" />
 <item type="id" name="tabcontent" />
 <item type="id" name="tabhost" />
 <item type="id" name="tabs" />
 <item type="id" name="text1" />
 <item type="id" name="text2" />
 <item type="id" name="title" />
 <item type="id" name="title_container" />
 <item type="id" name="toggle" />
 <item type="id" name="secondaryProgress" />
 <item type="id" name="lock_screen" />
 <item type="id" name="edit" />
 <item type="id" name="widget_frame" />
 <item type="id" name="button1" />
 <item type="id" name="button2" />
 <item type="id" name="button3" />
 <item type="id" name="extractArea" />
 <item type="id" name="candidatesArea" />
 <item type="id" name="inputArea" />
 <item type="id" name="inputExtractEditText" />
 <item type="id" name="selectAll" />
 <item type="id" name="cut" />
 <item type="id" name="copy" />
 <item type="id" name="paste" />
 <item type="id" name="copyUrl" />
 <item type="id" name="selectTextMode" />
 <item type="id" name="switchInputMethod" />
 <item type="id" name="keyboardView" />
 <item type="id" name="closeButton" />
 <item type="id" name="startSelectingText" />
 <item type="id" name="stopSelectingText" />
 <item type="id" name="addToDictionary" />
 <item type="id" name="accountPreferences" />
 <item type="id" name="smallIcon" />
 <item type="id" name="custom" />
 <item type="id" name="home" />
 <item type="id" name="fillInIntent" />
 <item type="id" name="rowTypeId" />
 <item type="id" name="up" />
 <item type="id" name="action_menu_divider" />
 <item type="id" name="icon_menu_presenter" />
 <item type="id" name="list_menu_presenter" />
 <item type="id" name="action_menu_presenter" />
 <item type="id" name="overflow_menu_presenter" />
 <item type="id" name="popup_submenu_presenter" />
</resources>

若在ids.xml中定义了ID,则在layout中可如下定义@id/price_edit,否则@+id/price_edit

简单来讲:

@+id 新增一个资源id
@id和android:id,引用现有的资源id

希望本文所述对大家Android程序设计有所帮助。


> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!

相关文章
  • Yii2rbac权限控制之rule教程详解
    Yii2rbac权限控制之rule教程详解
    这篇文章主要介绍了Yii2 rbac权限控制之rule教程详解的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下在我们之前Yii2搭建后台并实现rbac权限控制完整实例教程中,不知道你曾经疑惑过没有一个问题,rule表是做什么的,为什么在整个过程中我们都没有涉及到这张表? 相信我不说,部分人也都会去尝试,或百度或google,到头来也会竹篮打水,这部 ...
  • 将PHP的session数据存储到数据库中的代码实例
    这里我们将分享两个将PHP的session数据存储到数据库中的代码实例,分别针对PostgreSQL与MySQL,需要的朋友可以参考下一个开发环境有多个网站,需要使用不同的session,解决方案很多.不过这次也高大上一把,用数据库存,方便以后扩展. PostgreSQL版首先是数据库的部分 --drop table php_session create u ...
  • Web2.0编程思想:16条法则
    1.在你开始之前,先定一个简单的目标.无论你是一个Web 2.0应用的创建者还是用户,请清晰的构思你的目标.就像"我需要保存一个书签"或者"我准备帮助人们创建可编辑的.共享的页面"这样的目标,让你保持最基础的需求.很多Web 2.0应用的最初吸引之处就是它的简单,避免并隐藏了那些多余的复杂性.站在创建者的立场,可以想象 ...
  • 简单谈谈GET和POST有什么区别
    本文给大家总结了下get与post的具体区别,以及网上的那么多答案为什么都是错误的,非常的实用,这里推荐给大家如果有人问你,GET和POST,有什么区别?你会如何回答? 真实案例      前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用.     这个答案好像并不是他想要的.于是他继续追问有没有别的区别?我说这就是 ...
  • 探讨Ajax中有关readyState状态值和status状态码)的问题
    这篇文章主要介绍了探讨Ajax中有关readyState状态值和status状态码的问题的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下先看下面一段代码,然后给大家详细介绍,Ajax中有关readyState(状态值)和status(状态码)的问题,具体内容如下所示: var getXmlHttpRequest = function () { t ...
  • gVim,gVimEasy,gVimRead-only的简单区别
    今天打算好好学习一下python,买了一本书看了介绍无语了,gVim, gVim Diff, gVim Easy, gVim Read-only 的简单区别,需要的朋友可以参考下我在Window XP中安装了Gvim7.2,然后桌面上出现了三个快捷方式,gvim72.exe,gvim read-only,gvim easy,大家谁比较熟悉介绍一下啊,谢谢了! ...
猜你喜欢