zoukankan      html  css  js  c++  java
  • android相对布局中@id和@+id的区别(原理)

    @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

  • 相关阅读:
    CCoolBar 的替代方案 CDockablePane。
    CTreeView 的教程
    散列表
    Add and Search Word
    Contains Duplicate II
    Word Search II
    Implement Trie (Prefix Tree)
    (转)多进程 & 多线程的区别与适用场景
    (转)进程控制:进程的创建、终止、阻塞、唤醒和切换
    (转)几个常用的操作系统进程调度算法
  • 原文地址:https://www.cnblogs.com/yinyoupoet/p/13287568.html
Copyright © 2011-2022 走看看