安卓中@id与@+id的区别与实际应用中的@id报错问题
2016-04-11 01:10
302 查看
在安卓中,由于R.java文件的存在,各种控件设置的id在其中都是唯一的。
@+id 看样子就知道是干嘛的,为一个控件设id并加到R.java中。那么当@+id/使用了两次以上,由于id在R.java中定义为final的常量,是不会生成俩的。第二次及以后弄的不管用。
即@+id/ 的准确来说是召唤此id。如果此id不存在,创建它;如果已存在,则仅仅召唤它。
@id/ 仅召唤id,而不会创建id。
实际使用过程,则会出现@id/ 的错误:
此行报错:android:layout_above=”@id/tv_test2”
原因正是@id/ 仅仅是召唤id,而不会创建id。
view在xml中定义,而安卓必须将xml文件解析,才能够生成相应的视图和相关常量如id。
安卓从上到下顺序解析或者说顺序创建视图。第一个TextView首先加载完成,而第二个TextView还未加载,此时@id/tv_test2当然是召唤不出id的,因为id根本还没有生成。@id也就无从谈起。
更改为:android:layout_above=”@+id/tv_test2”
安卓将会增加一个id到R.java文件中,于是顺利通过。而第二个TextView 在id处再次使用了 “@+id/tv_test2”,将不会重复创建。
总结是:
@id/的使用比较苛刻,主要是view的xml代码谁先写和谁后写的问题,写在前面的view,无法使用@id/ 召唤写在后面的view。
于是,如果你使用了@id/ 的写法,可能将无法调换view与view的xm代码块之间的顺序(移动的原因往往是为了使代码遵循习惯,易于读懂),否则可能报错,即使不当场报错,也会在清理项目或调试时报错。
而在布局中常用来设置一个View在……之上,在……之下,对齐……左边,对齐……右边等属性。使用@+id/将没有此烦恼
因此,个人认为@+id/更好用些。
@+id 看样子就知道是干嘛的,为一个控件设id并加到R.java中。那么当@+id/使用了两次以上,由于id在R.java中定义为final的常量,是不会生成俩的。第二次及以后弄的不管用。
即@+id/ 的准确来说是召唤此id。如果此id不存在,创建它;如果已存在,则仅仅召唤它。
@id/ 仅召唤id,而不会创建id。
实际使用过程,则会出现@id/ 的错误:
<TextView android:id="@+id/tv_test1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@id/tv_test2" android:text="bookmarkCount" android:textSize="12sp" /> <TextView android:id="@+id/tv_test2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="absolute" android:textSize="12sp" />
此行报错:android:layout_above=”@id/tv_test2”
原因正是@id/ 仅仅是召唤id,而不会创建id。
view在xml中定义,而安卓必须将xml文件解析,才能够生成相应的视图和相关常量如id。
安卓从上到下顺序解析或者说顺序创建视图。第一个TextView首先加载完成,而第二个TextView还未加载,此时@id/tv_test2当然是召唤不出id的,因为id根本还没有生成。@id也就无从谈起。
更改为:android:layout_above=”@+id/tv_test2”
安卓将会增加一个id到R.java文件中,于是顺利通过。而第二个TextView 在id处再次使用了 “@+id/tv_test2”,将不会重复创建。
总结是:
@id/的使用比较苛刻,主要是view的xml代码谁先写和谁后写的问题,写在前面的view,无法使用@id/ 召唤写在后面的view。
于是,如果你使用了@id/ 的写法,可能将无法调换view与view的xm代码块之间的顺序(移动的原因往往是为了使代码遵循习惯,易于读懂),否则可能报错,即使不当场报错,也会在清理项目或调试时报错。
而在布局中常用来设置一个View在……之上,在……之下,对齐……左边,对齐……右边等属性。使用@+id/将没有此烦恼
因此,个人认为@+id/更好用些。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories