2012-09-10 9 views
8

Tengo un diseño y necesito colocar una de las vistas en el centro. Es fácil. El problema es que también tengo otras vistas que deben ubicarse en la parte superior de la pantalla.Ver en el centro del diseño si hay espacio suficiente

Problema: Si hay suficiente espacio se ve bien, pero cuando la pantalla es demasiado pequeña los elementos superior y central superponen.

Pregunta: Cómo empujar el elemento "centrado" hacia abajo si la pantalla es demasiado pequeña?

El diseño original es muy complejo, preparé un ejemplo:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TextView 
    android:id="@+id/theOneAtTheTop" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Some long text which may overlap the lower view. Some long text which may overlap the lower view." 
    android:layout_alignParentTop="true" 
    /> 


<TextView 
    android:id="@+id/theOneInTheMiddlep" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Some long text which may overlap the upper view. Some long text which may overlap the upper view. " 
    android:layout_centerInParent="true" 
    /> 


</RelativeLayout> 

Aquí hay un poco de simulación. La imagen del medio muestra cómo se ve en una pantalla pequeña, y las imágenes a los lados muestran la situación deseada.

+0

ponga una captura de pantalla y el código de diseño. –

+0

publique su código xml –

+0

Publiqué xml, prepararé una imagen en un minuto. Original xml es complejo, sería difícil obtener el punto –

Respuesta

1

Bueno, voy a cambiar por completo esta respuesta. En caso de que la alineación deseada sea vertical, puede colocar su código dentro de RelativeLayout, que completará _fill_parent_ y será debajo de theOneAtTheTop. Dentro de él, puedes poner la vista que quieres que esté verticalmente centrada.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/theOneAtTheTop" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:text="Some long text which may overlap the lower view. Some long text which may overlap the lower view." /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@+id/theOneAtTheTop" > 

     <TextView 
      android:id="@+id/theOneInTheMiddlep" 
      android:layout_width="200sp" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:text="Some long text which may overlap the upper view. long text which may overlap the upper view. Some long text which may overlap the upper view. " /> 
    </RelativeLayout> 

</RelativeLayout> 

creo que sirve

+0

Para ser sincero, no veo la diferencia entre tu código y el mío –

+1

Sry, es porque publiqué el código incorrecto (en realidad, el tuyo antes de las modificaciones) –

+0

Bueno, mi respuesta es similar a la de Vinay, ¿qué me hace preguntar: quieres que la vista se centre en la dirección horizontal o vertical? –

0

sólo tiene que añadir android:layout_below="@+id/theOneAtTheTop" a la segunda TextView y que son buenos para ir.

+0

Esto anulará 'layout_centerInParent', por lo que' theOneInTheMiddle' no lo hará estar en el centro si la pantalla es lo suficientemente grande –

+0

Correcto, Mi mal. Olvidó la preferencia –

1

Dudo mucho que puede hacer esto directamente en el archivo de diseño como un diseño xml no es el lugar para tal lógica condicional. La única situación real donde podría (creo) usar el archivo de diseño sería si supiera que las dimensiones exactas de las vistas involucradas más el nivel API de la aplicación sería 3.2, creando una gran cantidad de diseños para diferentes situaciones (que realmente duda).

Si centra una de las vistas en RelativeLayout se centrará sin importar qué, no tiene la noción de superposición de vistas en el nivel de archivo de diseño xml. En el código es otra cosa.

+0

Sí, mis pensamientos son exactamente. Pero esta plataforma me sorprendió muchas veces (la mayoría de las malas maneras;)), así que todavía creo que vale la pena preguntar. ¡Gracias! –

Cuestiones relacionadas