2011-05-11 19 views
20

¿Puede alguien explicarme por qué ImageView no aparece sobre LinearLayout?Usando layout_above en RelativeLayout

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <LinearLayout 
     android:id="@+id/rev_main" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <!-- some stuff in here --> 
    </LinearLayout> 
    <ImageView 
     android:id="@+id/rev_arrow" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/arrow" 
     android:layout_above="@id/rev_main" 
     /> 
</RelativeLayout> 

No lo entiendo.

+0

lo hace aparecer en cualquier lugar? nada en absoluto? tal vez publique una foto de cómo se ve y sería más fácil decir por qué. En mis diseños, uso ID como "@ + id/rev_main" Incluso en los atributos como layout_above. A decir verdad, aunque no estoy seguro de la diferencia entre los dos, ¿tal vez intentar eso? – FoamyGuy

+0

Desaparece. Si declaro ImageView primero y trato de posicionar LinearLayout por encima de ImageView, el LinearLayout también desaparece. – Andrew

+1

Eso es un error, ¿verdad? – Price

Respuesta

22

Esto sucede cuando se especifica la alineación relativa a otra presentación. La solución que encontré fue ir en la otra dirección.

En vez de decirle a ImageView que esté por encima de LinearLayout, diga que LinearLayout se encuentre debajo de ImageView.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <LinearLayout 
     android:id="@+id/rev_main" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/rev_arrow"> 
     <!-- some stuff in here --> 
    </LinearLayout> 
    <ImageView 
     android:id="@+id/rev_arrow" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/arrow" 
     /> 
</RelativeLayout> 
+1

Aquí está mi problema con esto: El drawable utilizado para los cambios de ImageView. Lo que significa que necesito una variable en el código. La posición (arriba o abajo) del LinearLayout también cambia. Si necesito editar los LayoutParams para LinearLayout, eso significa que también necesito una variable para LinearLayout. Esperaba solo necesitar una variable para ImageView. – Andrew

+1

Bueno, las variables son baratas. Alternativamente, podría crear dos vistas de imágenes, 1 arriba y 1 abajo y establecer el estado inicial en android: visibility = "gone". Luego, puede cambiar programáticamente el estado de visibilidad de cada vista en función de sus necesidades. –

+0

¿No necesita mover el rev_arrow ImageView arriba de LinearLayout en el xml? De lo contrario, obtendrá un error de referencia ya que el archivo se analiza de forma lineal. Me encontré con ese problema. :-P – stuckj

7

El siguiente debe funcionar para usted:

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/rev_arrow" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/arrow" 
     android:layout_alignParentTop="true" 
     /> 
    <LinearLayout 
     android:id="@+id/rev_main" 
     android:layout_width="fill_parent" 
     android:layout_below="@id/rev_arrow" 
     android:layout_height="wrap_content"> 
     <!-- some stuff in here --> 
    </LinearLayout> 
</RelativeLayout> 
+2

Tengo un problema con esto. A veces quiero el LinearLayout sobre el ImageView. Cuando cambio el atributo de LinearLayout a layout_above, LinearLayout desaparece por completo. – Andrew

1

Tuve un problema similar al crear un menú de opciones personalizado. La forma más sencilla de establecer z-orden de vistas era hacerlo mediante programación. Si desea cambiar el orden en ocasiones, su debe llamar fácilmente:

No sé si es adaptable para su aplicación, pero en mi caso funciona perfecto. Si necesita más código, hágamelo saber.

0

Si tiene este problema en ListView, asegúrese de utilizar el método de inflación adecuado. El grupo de vista padre debe especificarse para la inflación correcta.

mLayoutInflater.inflate(R.layout.listitem, parent, false); 

No utilice

mLayoutInflater.inflate(R.layout.listitem, null); 
Cuestiones relacionadas