2012-06-06 23 views
11

Hi im cercando di creare un layout personalizzato ma sto lottando per farlo funzionare correttamente sto ottenendo un errore "dipendenze circluar Non possono esistere nel layout relativo"layout relativo dipendenze circolari Android errore

Heres che cosa im cercando di ottenere in termini di layout e quindi riempire ogni campo di testo con i dati.

date    number 
name score - score name 
scorers    scorers 

heres il mio tentativo

<?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 l'errore

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) 

risposta

13

Beh, avete un paio di problemi qui:

  1. TextView04 dichiara android:layout_below="@+id/HomeScore" e android:layout_centerVertical="true", che il conflitto

  2. AwayTeam dichiara android:layout_alignBaseline="@+id/TextView04" e android:layout_alignBottom="@+id/TextView04", che il conflitto

  3. HomeTeam dichiara android:layout_alignBaseline="@+id/TextView04" e android:layout_alignBottom="@+id/TextView04", quale conflitto

  4. AwayScore dichiara android:layout_alignBaseline="@+id/TextView04" e android:layout_alignBottom="@+id/TextView04", che il conflitto

Come Samir sottolinea, almeno una delle tue dipendenze circolari è tra TextView04 e HomeScore. TextView04 dice che deve essere inferiore a HomeScore e HomeScore dice che il suo fondo è allineato con il fondo di TextView04. Tuttavia, alcuni degli altri che ho notato sopra possono anche creare dipendenze circolari. Assicurarsi che due widget non provino a vincolarsi l'uno sull'altro sullo stesso asse (come in TextView04 e HomeScore).

+0

"Assicurarsi che ogni widget si blocchi solo una volta in ciascun asse" Non è normale vincolare tra due viste in un asse se si desidera riempire l'area tra di esse? – Barak

+0

@Barak: hai ragione - la storia è più complessa di quanto ho indicato. Ho rimosso quel passaggio dalla mia risposta. Grazie! – CommonsWare

7

Rimuovere android:layout_below="@+id/HomeScore" dalla prima TextView nel layout crea dipendenze circolari.

Perché?

Perché si imposta android:layout_alignBottom="@+id/TextView04" in TextView il cui id è android:id="@+id/HomeScore" .e prima TextView (TextView04) hanno anche 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

grazie - solo per scopi di apprendimento, cosa è una depurazione circolare –

+0

vedere perché dipendenza circolare ... –

1

avete un piccolo errore che potrebbe essere il motivo:

Quando si fa riferimento ad un altro ID, non utilizzare @+id/... solo @id/.... Quindi ovunque tranne l'attributo android:id, è necessario rimuovere +.

Dopo averlo fatto, è possibile che vengano visualizzati alcuni avvisi che indicano l'errore possibile!

+5

Che non è corretto.La * prima occorrenza * di un ID ottiene il '+', anche se ciò si verifica prima di 'android: id'. Ad esempio, vedi: https://github.com/commonsguy/cw-omnibus/blob/master/Containers/Relative/res/layout/main.xml – CommonsWare

+0

Se non ti dispiace, per favore dammi una "prova" ufficiale. – WarrenFaith

+1

'RelativeLayout' ha supportato forward-references come questo per quasi tre anni: http://android-developers.blogspot.com/2009/10/ui-framework-changes-in-android-16.html – CommonsWare

Problemi correlati