在相对布局中定位时出现"@id"与"@ + id"的问题

iro*_*xxx 19 android

美好的一天,我有相对布局的轻微问题,我不知道为什么.通常,当您尝试相对于其他视图进行定位时,使用"@id"但它似乎根本不会定位.只有当我使用值"@ + id"时它才能正常运行.在下面的例子中,我有4个水平方向的视图我希望TextView的"percentage_id"位于图像视图之间,但更接近最后一个.

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/sales_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:text="£0.00"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#AADDEE"
        android:textSize="18sp"
        android:textStyle="bold" >
    </TextView>

    <ImageView
        android:id="@+id/arrow_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_toRightOf="@id/sales_id"
        android:baselineAlignBottom="true"
        android:src="@drawable/rightarrow" >
    </ImageView>

    <TextView
        android:id="@+id/percentage_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/imagearrow_id"
        android:layout_toRightOf="@id/arrow_id"
        android:text="0.00%"
        android:textColor="#606090"
        android:textSize="18sp" >
    </TextView>

    <ImageView
        android:id="@+id/imagearrow_id"
        android:layout_width="20dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="2dp"
        android:layout_weight="0"
        android:gravity="right"
        android:padding="5dp"
        android:src="@drawable/rightarrow" >
    </ImageView>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

现在无论我做什么,它只是进入相对布局中的默认位置,只有当我使用"@ + id"而不是"@id"时才会进入正确的位置.我知道有时它可以给出错误,如果我试图引用的视图还没有被声明,但即使我将textview放在最后,我仍然无法得到它我想要的地方直到我使用"@ + id".

这是一个新的东西,也适用于相对布局?因为我不知道为什么它不使用"@id".我这样很好吗?有谁遇到过同样的问题?在网上看一些教程使用"@ + id"进行定位.谢谢

kco*_*ock 30

虽然你可以参考后面的层次结构中声明的看法,XML文档仍然是顺序解析.第一次引用特定ID时,必须使用前缀@+id.实际上,您可以为每个ID引用添加前缀,@+id并且一切都可以正常工作 - 事实上,如果您使用图形编辑器设计界面,则会发生这种情况.为了安全起见,一切都以前缀为前提@+id.在+简单地告诉它生成一个ID在R.java当且仅当它尚未确定.如果您尝试多次定义它,它只会看到它已经被定义并继续正常运行.

在XML中,您可以imagearrow_id从percentage_idTextView 引用.但是,此时imagearrow_id尚未确定.对于这种情况,你可以简单地前缀layout_toLeftOf=@+id/imagearrow_id在你的TextView,然后在下面,定义你的ImageView(时imagearrow_id),你会不会需要+的android:id属性.