Вопрос по android, layout – Ошибка круговых зависимостей Android Relative Layout

11

Я пытаюсь создать пользовательский макет, но я изо всех сил пытаюсь заставить его работать должным образом. Я получаю сообщение об ошибке ". Циркулярные зависимости не могут существовать в Относительном макете".

Вот что я пытаюсь достичь в терминах макета, а затем заполняю каждое текстовое поле данными.

date                number
name   score - score  name
scorers              scorers

вот моя попытка

<?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>

вот ошибка

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)

Ваш Ответ

3   ответа
13

TextView04 declares android:layout_below="@+id/HomeScore" and android:layout_centerVertical="true", which conflict

AwayTeam declares android:layout_alignBaseline="@+id/TextView04" and android:layout_alignBottom="@+id/TextView04", which conflict

HomeTeam declares android:layout_alignBaseline="@+id/TextView04" and android:layout_alignBottom="@+id/TextView04", which conflict

AwayScore declares android:layout_alignBaseline="@+id/TextView04" and android:layout_alignBottom="@+id/TextView04", which conflict

Как указывает Самир, по крайней мере одна из ваших круговых зависимостей находится междуTextView04 а такжеHomeScore. TextView04 говорит, что это должно быть нижеHomeScore, а такжеHomeScore говорит, что его дно совмещено с дномTextView04, Однако некоторые другие, которые я отмечаю выше, также могут создавать циклические зависимости. Убедитесь, что два виджета не пытаются ограничивать друг друга на одной оси (как вTextView04 а такжеHomeScore).

@ Барак: Вы правы - история сложнее, чем я указал. Я удалил этот отрывок из своего ответа. Спасибо!
& quot; Убедитесь, что каждый виджет ограничивает себя только один раз на каждой оси & quot; Разве не принято ограничивать два вида на оси, если вы хотите заполнить область между ними?
7

android:layout_below="@+id/HomeScore" с первогоTextView в вашем макете это создает круговые зависимости.

Why ?

Потому что вы установилиandroid:layout_alignBottom="@+id/TextView04" в 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" />
понять почему круговая зависимость ...
спасибо - только в учебных целях, что такое круговая зависимость Luke Batley
1

Когда вы ссылаетесь на другой идентификатор, не используйте@+id/... просто@id/..., Так что везде, кромеandroid:id приписать+ должен быть удален.

После этого вы можете получить некоторые предупреждения, указывающие на возможную ошибку!

Если вы не возражаете, пожалуйста, дайте мне официальное "доказательство".
Это неверно.first occurrence удостоверение личности получает+даже если это произойдет доandroid:id, Например, см .:github.com/commonsguy/cw-omnibus/blob/master/Containers/…
RelativeLayout поддерживает подобные ссылки в течение почти трех лет:android-developers.blogspot.com/2009/10/…
Спасибо. Это недостаток ранних последователей. Вы не можете быть в курсе всех изменений :)

Похожие вопросы