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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 05:27:57  来源:igfitidea点击:

Android Relative Layout circular dependencies error

androidlayout

提问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:

好吧,你在这里有几个问题:

  1. TextView04declares android:layout_below="@+id/HomeScore"and android:layout_centerVertical="true", which conflict

  2. AwayTeamdeclares android:layout_alignBaseline="@+id/TextView04"and android:layout_alignBottom="@+id/TextView04", which conflict

  3. HomeTeamdeclares android:layout_alignBaseline="@+id/TextView04"and android:layout_alignBottom="@+id/TextView04", which conflict

  4. AwayScoredeclares android:layout_alignBaseline="@+id/TextView04"and android:layout_alignBottom="@+id/TextView04", which conflict

  1. TextView04声明android:layout_below="@+id/HomeScore"and android:layout_centerVertical="true", 冲突

  2. AwayTeam声明android:layout_alignBaseline="@+id/TextView04"and android:layout_alignBottom="@+id/TextView04", 冲突

  3. HomeTeam声明android:layout_alignBaseline="@+id/TextView04"and android:layout_alignBottom="@+id/TextView04", 冲突

  4. AwayScore声明android:layout_alignBaseline="@+id/TextView04"and android:layout_alignBottom="@+id/TextView04", 冲突

As Samir points out, at least one of your circular dependencies is between TextView04and HomeScore. TextView04says it is to be below HomeScore, and HomeScoresays 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 TextView04and HomeScore).

正如 Samir 指出的那样,您的循环依赖中至少有一个在TextView04和之间HomeScoreTextView04说它在下面HomeScore,并HomeScore说它的底部与 的底部对齐TextView04。但是,我上面提到的其他一些也可能会产生循环依赖。确保两个小部件不会试图在同一轴上相互约束(如TextView04HomeScore)。

回答by Samir Mangroliya

Remove android:layout_below="@+id/HomeScore"from first TextViewin 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:idattribute 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!

完成后,您可能会收到一些警告,指出可能的错误!