2012-06-06 17 views
11

Hola estoy tratando de crear un diseño personalizado, pero estoy luchando para conseguir que funcione correctamente Recibo un error "no pueden existir dependencias circluar en la disposición relativa"Android de disposición relativa dependencias circulares de error

Esto es lo im tratando de lograr en termas de diseño y luego llenar cada campo de texto con datos.

date    number 
name score - score name 
scorers    scorers 

aquí está mi intento

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

aquí está el 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) 

Respuesta

13

Bueno, usted tiene algunos problemas aquí:

  1. TextView04 declara android:layout_below="@+id/HomeScore" y android:layout_centerVertical="true", que entran en conflicto

  2. AwayTeam declara android:layout_alignBaseline="@+id/TextView04" y android:layout_alignBottom="@+id/TextView04", que entran en conflicto

  3. HomeTeam declara android:layout_alignBaseline="@+id/TextView04" y android:layout_alignBottom="@+id/TextView04", que conflicto

  4. AwayScore declara android:layout_alignBaseline="@+id/TextView04" y android:layout_alignBottom="@+id/TextView04", que entran en conflicto

Como señala Samir, al menos una de sus dependencias circulares es entre TextView04 y HomeScore. TextView04 dice que debe estar debajo de HomeScore, y HomeScore dice que su parte inferior está alineada con la parte inferior de TextView04. Sin embargo, algunos de los otros que menciono arriba también pueden crear dependencias circulares. Asegúrese de que dos widgets no intenten restringirse entre sí en el mismo eje (como en TextView04 y HomeScore).

+0

"Asegúrese de que cada widget solo se constriñe una vez en cada eje" ¿No es común restringir dos vistas en un eje si desea llenar el área entre ellas? – Barak

+0

@Barak: Tiene razón, la historia es más compleja de lo que indiqué. Eliminé ese pasaje de mi respuesta. ¡Gracias! – CommonsWare

7

Retire android:layout_below="@+id/HomeScore" de primera TextView en su diseño que crea dependencias circulares.

¿Por qué?

Debido configura android:layout_alignBottom="@+id/TextView04" en Textview cuyo ID es android:id="@+id/HomeScore" .y primera Textview (TextView04) también 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

gracias - solo para propósitos de aprendizaje qué es una dependencia circular –

+0

ver por qué la dependencia circular ... –

1

usted tiene un pequeño error que podría ser la razón:

Cuando se hace referencia a otro ID, no utilice @+id/... simplemente @id/.... Entonces, en todas partes, excepto en el atributo android:id, se debe eliminar el +.

¡Después de haber hecho eso, puede recibir algunas advertencias que apuntan a un posible error!

+5

Eso es incorrecto.La * primera aparición * de una identificación obtiene el '+', incluso si eso ocurre antes de 'android: id'. Por ejemplo, ver: https://github.com/commonsguy/cw-omnibus/blob/master/Containers/Relative/res/layout/main.xml – CommonsWare

+0

Si no te importa, por favor dame una "prueba" oficial. – WarrenFaith

+1

'RelativeLayout' ha admitido referencias avanzadas como esta durante casi tres años: http://android-developers.blogspot.com/2009/10/ui-framework-changes-in-android-16.html – CommonsWare

Cuestiones relacionadas