Ошибка круговых зависимостей Android Relative Layout
Привет, я пытаюсь создать пользовательский макет, но я изо всех сил стараюсь, чтобы он работал правильно. Я получаю сообщение об ошибке. "Отклики зависимости не могут существовать в Relative layout"
что они пытаются достичь в терминах макета, а затем заполняют каждое текстовое поле данными.
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)
Ответы
Ответ 1
У вас здесь несколько проблем:
-
TextView04
объявляет android:layout_below="@+id/HomeScore"
и android:layout_centerVertical="true"
, которые конфликтуют
-
AwayTeam
объявляет android:layout_alignBaseline="@+id/TextView04"
и android:layout_alignBottom="@+id/TextView04"
, которые конфликтуют
-
HomeTeam
объявляет android:layout_alignBaseline="@+id/TextView04"
и android:layout_alignBottom="@+id/TextView04"
, которые конфликтуют
-
AwayScore
объявляет android:layout_alignBaseline="@+id/TextView04"
и android:layout_alignBottom="@+id/TextView04"
, которые конфликтуют
Как указывает Самир, по крайней мере одна из ваших круговых зависимостей находится между TextView04
и HomeScore
. TextView04
говорит, что он должен быть ниже HomeScore
, а HomeScore
говорит, что его дно выровнено со дном TextView04
. Тем не менее, некоторые из других, которые я отмечаю выше, могут также создавать круговые зависимости. Убедитесь, что два виджета не пытаются сдерживать друг друга на одной и той же оси (как в TextView04
и HomeScore
).
Ответ 2
Удалите android:layout_below="@+id/HomeScore"
с первого TextView
в вашем макете, он создает круговые зависимости.
Почему?
Потому что вы устанавливаете 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" />
Ответ 3
У вас есть небольшая ошибка, которая может быть причиной:
Когда вы ссылаетесь на другой идентификатор, не используйте @+id/...
просто @id/...
. Поэтому везде, кроме атрибута android:id
, необходимо удалить +
.
После этого вы можете получить некоторые предупреждения, указывающие на возможную ошибку!