【问题标题】:How do I enforce a circular reference in a RelativeLayout?如何在 RelativeLayout 中强制执行循环引用?
【发布时间】:2011-04-15 19:19:10
【问题描述】:

我在一个必须相互引用的 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 中的图形布局视图可以正确显示它并且不会抱怨循环引用。

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

提前致谢, 巴里 附言有什么方法可以提前声明一个id,比如C/C++?

【问题讨论】:

  • 很确定你不需要“循环引用”,因为你说这个。你想做什么?

标签: android android-relativelayout


【解决方案1】:

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

android:layout_toLeftOf="@+id/imgArrow"

【讨论】:

  • 成功了,谢谢!我从来没有想过我可以在引用它时声明一个 id。非常感谢。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多