2012-06-06 10 views
11

Hi im próbuje utworzyć niestandardowy układ, ale jestem stara się zmusić go do pracy prawidłowo Dostaję błąd „circluar zależności nie może istnieć w układzie względne”Android względna Układ okrągłe zależności błąd

heres co im starając się dojść do siebie w termach układu, a następnie wypełnić dane w każdym polu tekstowym.

date    number 
name score - score name 
scorers    scorers 

herezje moja próba

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

herezje błąd

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) 

Odpowiedz

13

Cóż, masz kilka problemów tutaj:

  1. TextView04 deklaruje android:layout_below="@+id/HomeScore" i android:layout_centerVertical="true", który konflikt

  2. AwayTeam deklaruje android:layout_alignBaseline="@+id/TextView04" i android:layout_alignBottom="@+id/TextView04", który konflikt

  3. HomeTeam deklaruje android:layout_alignBaseline="@+id/TextView04" i android:layout_alignBottom="@+id/TextView04", który to konflikt

  4. AwayScore deklaruje android:layout_alignBaseline="@+id/TextView04" i android:layout_alignBottom="@+id/TextView04", który konflikt

Jak Samir wskazuje co najmniej jeden ze swoich okrągłych jest zależnościami między TextView04 i HomeScore. TextView04 mówi, że ma być poniżej HomeScore, a HomeScore mówi, że jego spód jest wyrównany z dnem TextView04. Jednak niektóre z pozostałych wymienionych powyżej mogą również tworzyć zależności cykliczne. Upewnij się, że dwa widżety nie próbują się ze sobą wiązać na tej samej osi (jak w TextView04 i HomeScore).

+0

"Upewnij się, że każdy widget ogranicza się tylko raz w każdej osi" Czy często nie ma ograniczeń między dwoma widokami w osi, jeśli chcesz wypełnić obszar między nimi? – Barak

+0

@Barak: Masz rację - historia jest bardziej złożona, niż wskazałem. Usunąłem ten fragment z mojej odpowiedzi. Dzięki! – CommonsWare

7

Usuń android:layout_below="@+id/HomeScore" od pierwszego TextView w układzie tworzy wzajemnie od siebie zależnych.

Dlaczego?

Ponieważ ustawienie android:layout_alignBottom="@+id/TextView04" w TextView którego identyfikator jest android:id="@+id/HomeScore" .i pierwszy TextView (TextView04) mają również 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" /> 
+0

dziękuję - tylko dla celów edukacyjnych, co to jest okrągła podstawa –

+0

zobacz, dlaczego zależność okrągła ... –

1

Masz mały błąd, który może być przyczyną:

Kiedy można odwołać się do innego identyfikatora, nie używaj @+id/... tylko @id/.... Więc wszędzie oprócz atrybutu android:id należy usunąć +.

Po wykonaniu tej czynności możesz otrzymać ostrzeżenia wskazujące na możliwy błąd!

+5

To jest nieprawidłowe.Pierwsze * identyfikatora dostaje '+', nawet jeśli występuje przed 'android: id'. Na przykład zobacz: https://github.com/commonsguy/cw-omnibus/blob/master/Containers/Relative/res/layout/main.xml – CommonsWare

+0

Jeśli nie masz nic przeciwko, proszę, daj mi oficjalny "dowód". – WarrenFaith

+1

'RelativeLayout' obsługuje podobne odniesienia do przodu przez prawie trzy lata: http://android-developers.blogspot.com/2009/10/ui-framework-changes-in-android-16.html – CommonsWare