2011-10-25 33 views
25

Tengo un RelativeLayout con vistas alineada con relación a él (su padre), utilizando (por ejemplo):Android - ¿Cómo coloco las vistas en un desplazamiento relativo al centro/arriba/abajo (etc.) de su elemento primario?

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); 
textView.setLayoutParams(layoutParams); 

y ahora me pregunto, ¿cómo puedo situar la vista con relación a la parte inferior de su padre, pero al un desplazamiento (por ejemplo, 100 píxeles por encima de la parte inferior, 20 píxeles de la izquierda, etc.), o de forma similar con el centro (30 píxeles debajo del centro)?

schematic image of the necessary layout

He tratado de establecer los márgenes de la vista (por ejemplo):

layoutParams.setMargins(140, 0, 0, 0); 

antes de aplicarlo a la textView, pero que no funcionó.

Parece una forma extremadamente útil de alinear vistas para varios tamaños de pantalla.

Es importante para mí lograr esto en el código, sin usar xmls.

Gracias!

+0

crear diseño desde xml esto es para crear .. –

+0

@PolamReddy Lo siento, no entiendo. ¿Podrías reformular por favor? – DannyA

+0

su creación dinámica es algo difícil, cree el diseño del archivo xml que será fácil de crear. –

Respuesta

53

que tienen 2 maneras, los easies está utilizando una vista vacía de anclaje colocado en el centro

<View 
     android:id="@+id/anchor" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_centerInParent="true" /> 


<TextView 
    android:id="@+id/imageView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/anchor" 
    android:layout_marginBottom="20dp" 
    android:text="hello world!"/> 

O puede centrar su punto de vista y utilizar PADING por posicionamiento (debe duplicar el relleno utilizado, ya que se desborda por debajo el centro de la pantalla)

<TextView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:paddingBottom="40dp" 
     android:text="hello world!"/> 
+0

¡qué resurrección :). ¿Diría usted que las ventajas son: el método de anclaje es un poco más fácil de usar, pero puede desperdiciar un poco más de recursos de CPU/memoria (lo que hace que el árbol de diseño relativo sea más grande)? Además, mi pregunta original necesitaba que esto se hiciera en código. ¿Hay algo más en esto que usar algo como: layoutParams.addRule (RelativeLayout.CENTER_IN_PARENT, 0)? ¡Gracias! – DannyA

+0

Para una vista simple donde tienes un par de elementos, ¡esto funciona a la perfección! – Vladimir

0

que acaba de comenzar la programación Android esta noche, por lo que este puede ser viejo o una mala idea ... pero yo estaba jugando con la respuesta anterior y encontró el posicionamiento de un elemento a mi otro elemento fue causando un problema, ya sea el relleno Estaré en el camino o algo así. Esto es lo que terminé haciendo.

Usando la técnica de anclaje, también le di al ancla una altura (el doble de lo que necesita), y luego alineé mi elemento con la parte superior. ¡De esa forma estaría en el medio de la vista menos la mitad de la altura del ancla!

<View 
    android:id="@+id/anchor" 
    android:layout_width="0dp" 
    android:layout_height="200dp" 
    android:layout_centerInParent="true" /> 

<TextView 
    android:id="@+id/heading" 
    android:text="@string/heading" 
    android:textColor="@android:color/white" 
    android:textSize="24sp" 
    android:layout_alignTop="@id/anchor" 
    android:layout_centerHorizontal="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

<TextView 
    android:id="@+id/subheading" 
    android:text="@string/subheading" 
    android:textColor="@android:color/white" 
    android:textSize="12sp" 
    android:layout_below="@+id/heading" 
    android:layout_centerHorizontal="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

¡La otra respuesta ayudó mucho pero solo quería dar mis 2 centavos!

Cuestiones relacionadas