2011-04-15 20 views
13

Tengo dos widgets dentro de RelativeLayout que deben hacer referencia entre sí. Técnicamente no es una referencia circular desde el widget A está alineado verticalmente con el widget de widget de B y B se alinean horizontalmente con el widget de A. Aquí está mi código (condensada):¿Cómo hago cumplir una referencia circular en RelativeLayout?

<Button android:id="@+id/btnLanguageFrom" 
     android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_toLeftOf="@id/imgArrow" 
      android:text="English" /> 

    <ImageView android:id="@+id/imgArrow" 
     android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginRight="10dp" 
      android:layout_alignParentTop="true" 
      android:layout_alignBottom="@id/btnLanguageFrom" 
      android:layout_centerHorizontal="true" 
      android:src="@drawable/arrow_right" /> 

Sin embargo cuando construyo consigo este error :

Error: No resource found that matches the given name (at 'layout_toLeftOf' with value '@id/imgArrow').

Curiosamente, la vista gráfica Layout en Eclipse muestra correctamente y no se queja de la referencia circular.

no veo el problema con dos widgets referencia entre sí a lo largo de diferentes dimensiones (horizontal y vertical), ya que no puede causar un bucle infinito. ¿Hay alguna forma de evitar este problema? Esta es la única forma que conozco para obtener el diseño que necesito.

Gracias de antemano, Barry P.S. ¿Hay alguna forma de declarar una identificación por adelantado, como en C/C++?

+0

bastante seguro de que no necesita una "referencia circular" como usted dice, para esto. ¿que estás tratando de hacer? – binnyb

Respuesta

27

La primera vez que hace referencia a una ID, use el prefijo @ +, que le dice al generador de recursos que agregue la ID, en lugar de intentar encontrarla. Así que intente:

android:layout_toLeftOf="@+id/imgArrow" 
+4

¡Eso funcionó, gracias! Nunca se me ocurrió que podía declarar una identificación cuando la referenciaba. Muchas gracias. –

1

Una referencia circular es lo que desea evitar. Pero para resolver su problema simplemente cambiar la definición de su Button y ImageView para que el ImageView que estés refiriendo en el Button se define en primer lugar. Por alguna razón, no es posible hacerlo al revés.

Además yo siempre utilizar el mismo tipo refernence. Entonces en su caso: "@+id/imgArrow"

Cuestiones relacionadas