@id和@+id的区别,网上讲的主要是@id是引用已经存在的控件,而@+id则是声明一个新的id。
但是在相对布局中,layout_below="@id/xxx"layout_below="@+id/xxx"似乎在显示上没什么区别,而事实上是存在细微不同的。

用一个例子来讲

<View    android:layout_below="@+id/view1"    android:layout_width="match_parent"    android:layout_height="wrap_content"/><View    android:id="@id/view1"    android:layout_width="match_parent"    android:layout_height="wrap_content"/>

上述代码是正确的,即下面的顺序是被允许的。但是去掉第一行的+号,或者将第二行与第一行的位置换一下,便不行!!!

android:layout_below="@+id/view1"android:id="@id/view1"

原理就是:
@+id会在R.java file里面添加一个新的id,这也就是能用findViewById(R.id.xxx)找到控件的原因,而@id就直接在这个文件里查找了。

而为什么已经存在了某个id,在layout_below里仍可以@+id呢?
因为android能容忍重复的id存在,并不是说会出现两个相同的id,而是新的id覆盖原有的id,而在这儿@+id不过是将id重复创建了一遍。

不建议在已存在某id的时候再在布局中使用@+id,虽然暂时这是被允许的,但是这种写法并不规范,在后续的android版本中可能被禁止这种写法。



欢迎大家加入QQ群一起交流讨论, 「吟游」程序人生——YinyouPoet

更多相关文章

  1. 【react-natvie】react-native Android(安卓)webview下h5使用rem
  2. 设置AlertDialog的列表样式
  3. Android中ImageView控件的ScaleType属性使用详解
  4. Android[学习] UI优化方案
  5. Android(安卓)MVC模式实例(一)
  6. 安卓ScrollView总结
  7. 闲聊c/c++ 1: 用c/c++混合编程方式为ios/android实现一个自绘日
  8. 调试方法之打堆栈加重写控件
  9. 思考Android架構(一):What & Why《Android的UI控件是单线程》?

随机推荐

  1. Android8.0 PackageManagerService相关 -
  2. Github学习之EasyTabs打造绚丽TabLayout+
  3. android调用本地录制程序获取录制文件路
  4. Android开发实践 BroadcastReceiver
  5. Code snippets about android locks scre
  6. ContentProvider实现数据共享1
  7. Android(安卓)VNC Server New
  8. Retrofit2的使用
  9. ListActivity使用注意
  10. Android(安卓)桌面应用管理