如何在RelativeLayout中强制执行循环引用?

时间:2011-04-15 19:19:10

标签: android android-relativelayout

我在RelativeLayout中有两个必须互相引用的小部件。从技术上讲,它不是循环引用,因为小部件A与小部件B垂直对齐,小部件B与小部件A水平对齐。这是我的代码(浓缩):

    <Button android:id="@+id/btnLanguageFrom"
        android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_toLeftOf="@id/imgArrow"
            android:text="English" />

    <ImageView android:id="@+id/imgArrow"
        android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp" 
            android:layout_alignParentTop="true"
            android:layout_alignBottom="@id/btnLanguageFrom"
            android:layout_centerHorizontal="true"
            android:src="@drawable/arrow_right" />

然而,当我构建时,我收到此错误:

  

错误:找不到资源   匹配给定的名称(at   'layout_toLeftOf'有价值   '@ ID / imgArrow')。

有趣的是,Eclipse中的Graphical Layout视图正确显示它并且不会抱怨循环引用。

我没有看到两个小部件沿不同维度(水平和垂直)相互引用的问题,因为它不会导致无限循环。有没有解决这个问题的方法?这是我知道获得我需要的布局的唯一方法。

提前致谢, 巴里 附:有没有办法提前声明一个id,比如在C / C ++中?

2 个答案:

答案 0 :(得分:27)

第一次引用ID时,请使用@ +前缀,它告诉资源构建器添加ID,而不是尝试查找它。所以试试:

android:layout_toLeftOf="@+id/imgArrow"

答案 1 :(得分:1)

循环引用是您要避免的事情。但要解决您的问题,只需更改ButtonImageView的定义,以便首先定义ImageView中引用的Button。由于某些原因,不可能反过来这样做。

此外,我总是使用相同的参考类型。所以在你的情况下:"@+id/imgArrow"