我在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 ++中?
答案 0 :(得分:27)
第一次引用ID时,请使用@ +前缀,它告诉资源构建器添加ID,而不是尝试查找它。所以试试:
android:layout_toLeftOf="@+id/imgArrow"
答案 1 :(得分:1)
循环引用是您要避免的事情。但要解决您的问题,只需更改Button
和ImageView
的定义,以便首先定义ImageView
中引用的Button
。由于某些原因,不可能反过来这样做。
此外,我总是使用相同的参考类型。所以在你的情况下:"@+id/imgArrow"