Android 相对布局循环依赖错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10916892/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Android Relative Layout circular dependencies error
提问by Luke Batley
Hi im trying to create a custom layout but i'm struggling to get it to work properly i'm getting an error "circluar dependencies cannot exist in Relative layout"
嗨,我正在尝试创建自定义布局,但我正在努力使其正常工作,我收到错误消息“相对布局中不能存在圆形依赖项”
heres what im trying to acheive in termas of layout and then fill each text field with data.
这是我试图在布局方面实现的目标,然后用数据填充每个文本字段。
date number
name score - score name
scorers scorers
heres my attempt
这是我的尝试
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:paddingTop="30dp"
android:paddingBottom="30dp" >
<TextView
android:id="@+id/TextView04"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_below="@+id/HomeScore"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="-"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/blue"
android:textStyle="bold" />
<TextView
android:id="@+id/AwayTeam"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/TextView04"
android:layout_alignBottom="@+id/TextView04"
android:layout_alignParentRight="true"
android:layout_marginRight="22dp"
android:gravity="left"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/blue"
android:textStyle="bold" />
<TextView
android:id="@+id/HomeTeam"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/TextView04"
android:layout_alignBottom="@+id/TextView04"
android:layout_toRightOf="@+id/HomeScore"
android:gravity="right"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/blue"
android:textStyle="bold" />
<TextView
android:id="@+id/Attendance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/AwayTeam"
android:layout_alignTop="@+id/HomeScore"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/Division"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/textView1"
android:layout_toRightOf="@+id/HomeScore"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/AwayScore"
android:layout_width="20dp"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/TextView04"
android:layout_alignBottom="@+id/TextView04"
android:layout_toRightOf="@+id/TextView04"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/blue"
android:textStyle="bold" />
<TextView
android:id="@+id/HomeScore"
android:layout_width="20dp"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/TextView04"
android:layout_marginRight="15dp"
android:layout_toLeftOf="@+id/TextView04"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/blue"
android:textStyle="bold" />
</RelativeLayout>
heres the error
这是错误
06-06 14:42:44.348: E/AndroidRuntime(1167): java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.RelativeLayout$DependencyGraph.getSortedViews(RelativeLayout.java:1272)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.RelativeLayout.sortChildren(RelativeLayout.java:281)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:303)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.view.View.measure(View.java:8526)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.ListView.measureScrapChild(ListView.java:1153)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.ListView.measureHeightOfChildren(ListView.java:1266)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.ListView.onMeasure(ListView.java:1127)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.view.View.measure(View.java:8526)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3224)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.TableLayout.measureChildBeforeLayout(TableLayout.java:456)
06-06 14:42:44.348: E/AndroidRuntime(1167): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
回答by CommonsWare
Well, you have a few problems here:
好吧,你在这里有几个问题:
TextView04
declaresandroid:layout_below="@+id/HomeScore"
andandroid:layout_centerVertical="true"
, which conflictAwayTeam
declaresandroid:layout_alignBaseline="@+id/TextView04"
andandroid:layout_alignBottom="@+id/TextView04"
, which conflictHomeTeam
declaresandroid:layout_alignBaseline="@+id/TextView04"
andandroid:layout_alignBottom="@+id/TextView04"
, which conflictAwayScore
declaresandroid:layout_alignBaseline="@+id/TextView04"
andandroid:layout_alignBottom="@+id/TextView04"
, which conflict
TextView04
声明android:layout_below="@+id/HomeScore"
andandroid:layout_centerVertical="true"
, 冲突AwayTeam
声明android:layout_alignBaseline="@+id/TextView04"
andandroid:layout_alignBottom="@+id/TextView04"
, 冲突HomeTeam
声明android:layout_alignBaseline="@+id/TextView04"
andandroid:layout_alignBottom="@+id/TextView04"
, 冲突AwayScore
声明android:layout_alignBaseline="@+id/TextView04"
andandroid:layout_alignBottom="@+id/TextView04"
, 冲突
As Samir points out, at least one of your circular dependencies is between TextView04
and HomeScore
. TextView04
says it is to be below HomeScore
, and HomeScore
says its bottom is aligned with the bottom of TextView04
. However, some of the other ones I note above may also create circular dependencies. Ensure that two widgets do not try to constrain on each other on the same axis (as in TextView04
and HomeScore
).
正如 Samir 指出的那样,您的循环依赖中至少有一个在TextView04
和之间HomeScore
。TextView04
说它在下面HomeScore
,并HomeScore
说它的底部与 的底部对齐TextView04
。但是,我上面提到的其他一些也可能会产生循环依赖。确保两个小部件不会试图在同一轴上相互约束(如TextView04
和HomeScore
)。
回答by Samir Mangroliya
Remove android:layout_below="@+id/HomeScore"
from first TextView
in your layout it creates circular dependencies.
android:layout_below="@+id/HomeScore"
从TextView
布局中的第一个删除它会创建循环依赖项。
Why ?
为什么 ?
Because you set android:layout_alignBottom="@+id/TextView04"
in Textview whose id is
android:id="@+id/HomeScore"
.and first Textview(TextView04) have also android:layout_below="@+id/HomeScore"
.
因为您android:layout_alignBottom="@+id/TextView04"
在 id 为 . 的 Textview 中设置了
android:id="@+id/HomeScore"
第一个 Textview(TextView04) 也有android:layout_below="@+id/HomeScore"
.
<TextView
android:id="@+id/TextView04"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="-"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/blue"
android:textStyle="bold" />
回答by WarrenFaith
You have a small mistake that might be the reason:
您有一个小错误可能是原因:
When you reference to another id, don't use @+id/...
just @id/...
. So everywhere except the android:id
attribute the +
must be removed.
当您引用另一个 id 时,不要@+id/...
只使用@id/...
. 所以除了android:id
属性之外的所有地方都+
必须删除。
After you have done that you might get some warnings that point to the possible error!
完成后,您可能会收到一些警告,指出可能的错误!