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程序设计有所帮助。

(0)

相关推荐

  • Android显式启动与隐式启动Activity的区别介绍

    前段时间立志坚持写博客,但是发现自己的积累的确不多,于是假期泡了泡图书馆,读了一些很有价值的文章.收获颇多,今天的文章分享为主,共同学习. 为什么要写显式启动与隐式启动Activity.这源于自己的一次面试,被Baidu工程师问道,但是后来觉得自己回答的不好,废话少说,进入正题. 如题,Android的Acitivity启动大致有两种方式:显式启动与隐式启动.下面分别介绍: A:显式启动 对于初学者来说,这个最常见,下面用代码来解释什么是显式启动. 复制代码 代码如下: Intent inten

  • Android 启动 Service(startservice和bindservice) 两种方式的区别

    Android Service 生命周期可以促使移动设备的创新,让用户体验到最优越的移动服务,只有broadcast receivers执行此方法的时候才是激活的,当 onReceive()返回的时候,它就是非激活状态. 如果没有程序停止它或者它自己停止,service将一直运行.在这种模式下,service开始于调用Context.startService() ,停止于Context.stopService(). service可以通过调用Android Service 生命周期() 或 Se

  • android4.0与2.3版本的TP代码区别解析

    通常来说在android2.3上调试TP时,只需要把linux驱动调通,android就可以正常使用了.但是到了android4.0上又有些不同了,针对linux驱动,需添加如下一些内容: 1.在手指按下时需调用如下函数上报Key Down: input_report_key(struct input_dev *input, BTN_TOUCH, 1); 2.在手指释放时需调用如下函数上报Key Up: input_report_key(struct input_dev *input, BTN_

  • Android中gravity、layout_gravity、padding、margin的区别小结

    1.gravity与layout_gravity的区别 gravity 属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.该属性就干了这个. layout_gravity 是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左 靠右等位置就可以通过该属性设置. 这样就解释了,有什么我们弄个最外布局,然后里面包了几个布局,如果要使这几个布局都靠底,就可

  • Android源码中final关键字的用法及final,finally,finalize的区别

    hi 大家好,今日,天气剧变,非常冷,不想出门,于是给大家写了篇文章,关于android final关键字及final,finally,finalize的区别相关知识,具体详情如下所示: 先预告一下,下文中仅涉及java语法的讨论,和Android源码关系不大,请不要有阅读压力. 我发现在Android的源码中很多地方对final关键字的用法很是"别出心裁",之所以这么说是因为我从没看过是这么使用final关键字的,一个典型的例子是View类中onScrollChanged方法(不妨将

  • Android中home键和back键区别实例分析

    本文实例分析了Android中home键和back键区别.分享给大家供大家参考.具体如下: back键 Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity,当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有Activity都弹出结束后,应用也就随之结束了.如果说程序中存在service之类的,则可以在恰当的位置监听处理

  • Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用

    安卓的三种本地的典型数据存储方式 SharedPreferences 以文件格式保存在本地存储中 SQL数据库 这篇文章就是讲解一下如何使用 SharedPreferences 保存文件.主要解释什么都写在注释里面的. IDE : Android Studio 参考文章:http://www.jb51.net/article/74215.htm 絮叨一下:本来文件操作这一块上周就想把其弄懂,然后继续进一步的学习.但是因为官方的 Android Training 之中的概念太过于繁杂.导致我认为存

  • Android编程中FileOutputStream与openFileOutput()的区别分析

    本文实例分析了Android编程中FileOutputStream与openFileOutput()的区别.分享给大家供大家参考,具体如下: openFileOutput() 首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. public void save() { try { FileOutputStream outStream=this.openFileO

  • Android Activity中onStart()和onResume()的区别分析

    本文分析了Android Activity中onStart()和onResume()的区别.分享给大家供大家参考,具体如下: 首先你要知道Activity的四种状态: ① Active/Runing 一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态. ② Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态.此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它

  • Android开发中setContentView和inflate的区别分析

    本文实例讲述了Android开发中setContentView和inflate的区别.分享给大家供大家参考,具体如下: 一般用LayoutInflater做一件事:inflate inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化为View对象. 其中有一个比较常用,View inflate(int resource, ViewGroup root),另三个,其实目的和这个差不多. int resource,也就是resource/layout文件在R文件中对

  • Android编程中selector背景选择器用法实例分析

    本文实例讲述了Android编程中selector背景选择器用法.分享给大家供大家参考,具体如下: 在Android开发过程中,经常对某一View的背景在不同的状态下,设置不同的背景,增强用户体验.如果按钮,在按下时,背景变化,如果在代码中动态设置,相对比较麻烦.Android为我们提供了selector背景选择器可以非常方便的解决这一问题. Selector的结构描述: 1.android:state_pressed="true/false" true:表示按下状态下使用,false

  • Android编程中Handler原理及用法实例分析

    本文实例讲述了Android编程中Handler用法.分享给大家供大家参考,具体如下: 在Android的UI开发中,我们经常会使用Handler来控制主UI程序的界面变化.有关Handler的作用,我们总结为:与其他线程协同工作,接收其他线程的消息并通过接收到的消息更新主UI线程的内容. 我们假设在一个UI界面上面,有一个按钮,当点击这个按钮的时候,会进行网络连接,并把网络上的一个字符串拿下来显示到界面上的一个 TextView上面,这时就出现了一个问题,如果这个网络连接的延迟过大,可能是10

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

    本文分析了Android编程中@id和@+id的区别.分享给大家供大家参考,具体如下: Android中的组件需要用一个int类型的值来表示,这个值就是组件标签中的id属性值. id属性只能接受资源类型的值,也就是必须以@开头的值,例如,@id/abc.@+id/xyz等. 如果在@后面使用"+",表示当修改完某个布局文件并保存后,系统会自动在R.java文件中生成相应的int类型变量.变量名就是"/"后面的值,例如,@+id/xyz会在R.java文件中生成int

  • Android编程中activity的完整生命周期实例详解

    本文实例分析了Android编程中activity的完整生命周期.分享给大家供大家参考,具体如下: android中 activity有自己的生命周期,对这些知识的学习可以帮助我们在今后写程序的时候,更好的理解其中遇到的一些错误.这篇文章很长,希望不要耽误大家的时间- 今天不会涉及太多关于activity栈的东西,主要说activity自身的生命周期 区分几个概念 1 Activity 官方解释为 "An Activity is an application component that pro

  • Android编程中context及全局变量实例详解

    本文实例讲述了Android编程中context及全局变量的用法.分享给大家供大家参考,具体如下: 今天在研究context的时候,对application和activity context有了一定的了解,下面是从网上复制过来的资料 Application context和Activity context的区别: 这是两种不同的context,也是最常见的两种.第一种中context的生命周期与Application的生命周期相关的,context随着Application的销毁而销毁,伴随ap

  • Android编程中的消息机制实例详解

    本文实例讲述了Android编程中的消息机制.分享给大家供大家参考,具体如下: 在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListener { private TextView stateText; private Button btn; @Override public void onCreate(Bundle savedInstanceState)

  • Android编程中TextView宽度过大导致Drawable无法居中问题解决方法

    本文实例讲述了Android编程中TextView宽度过大导致Drawable无法居中问题解决方法.分享给大家供大家参考,具体如下: 在做项目的时候,很多时候我们都要用到文字和图片一起显示,一般设置TextView的DrawableLeft.DrawableRight.DrawableTop.DrawableBottom就行了.但是有一种情况是当TextView的熟悉是fill_parent或者使用权重的时候并且设置了起Gravity的ceter的时候,Drawable图片是无法一起居中的,为了

随机推荐