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

问题描述 投票:13回答:2

我在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" />

但是当我构建时,我收到此错误:

错误:找不到与给定名称匹配的资源(在'layout_toLeftOf'中,值为'@id / imgArrow')。

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

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

在此先感谢,Barry P.S.有没有办法提前声明一个id,就像在C / C ++中一样?

android android-relativelayout
2个回答
27
投票

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

android:layout_toLeftOf="@+id/imgArrow"

1
投票

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

另外,我总是使用相同的引用类型。所以在你的情况下:qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.