2011-07-22 14 views
5

En la imagen a continuación, el cuadrado amarillo representa un RelativeLayout que está dentro de mi diseño general.¿Cuál es una forma razonable de hacer este diseño?

El "mensaje de estado" de la fila superior es un ViewFlipper que responde a los botones de palanca (A, B) que el usuario puede presionar. Los botones C, D y E hacen otras cosas que vuelven a cargar toda la vista. Nuestro cliente solicita que los botones A, B, C, D y E se organicen de la manera que se muestra a continuación. (La alineación vertical no es tan importante como la alineación horizontal.)

EDITAR para decir A, B, C, D y E son imágenes de una inmersión de 20x20; se alinean dentro de un ancho de aproximadamente 300dip. Quiero que los botones mantengan su relación de aspecto.

looking to make this layout

He creado una extensión de LinearLayout que se infla botones A y B (desde un archivo XML), y luego otro LinearLayout que se infla botones C, D, y E en otro archivo XML.

botones A y B (en realidad son ToggleButtons):

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:baselineAligned="true" 
> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
    > 
     <ToggleButton 
      android:id="@+id/A" 
      android:textOn="" 
      android:textOff="" 
      android:background="@layout/A" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="60dp" 
      android:layout_marginRight="30dp" 
     /> 
     <ToggleButton 
      android:id="@+id/B" 
      android:textOn="" 
      android:textOff="" 
      android:background="@layout/B" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="30dp" 
      android:layout_marginRight="30dp" 
     /> 
    </LinearLayout> 
</RelativeLayout> 

Botones C, D, E archivo xml:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:baselineAligned="true" 
> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
    > 
     <ImageView 
      android:id="@+id/C" 
      android:src="@drawable/C" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="30dp" 
      android:layout_marginRight="30dp" 
     /> 
     <ImageView 
      android:id="@+id/D" 
      android:src="@drawable/D" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="30dp" 
      android:layout_marginRight="30dp" 
     /> 
     <ImageView 
      android:id="@+id/E" 
      android:src="@drawable/E" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="30dp" 
      android:layout_marginRight="30dp" 
     /> 
    </LinearLayout> 
</RelativeLayout> 

Mi código funciona, básicamente, pero tengo que fudge con los márgenes para hacer que las cosas se alineen correctamente (lo cual no hacen todavía). Me pregunto si hay alguna manera más clara de alinear los conjuntos de botones "A B" y "C D E"

ps: el lector astuto notará que estoy ampliando LinearLayout, pero inflando RelativeLayouts. (No sé por qué incluso puede funcionar, pero) cuando intenté extender RelativeLayout, el diseño "C D E" ni siquiera apareció en mi dispositivo. No sé a dónde fue.

Respuesta

3

Utilice un diseño lineal como cuerpo principal.

A continuación, utilice layout_gravity en los linearlayouts horizontales individuales para mantener el contenido Centrado

Utilice la layout_margin en cada una de la vista del niño al espacio aparte. He especificado esto como 15dip pero debe usar una dimensión para que pueda modificarlos todos juntos.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView android:id="@+id/some_text" 
     android:layout_height="wrap_content" 
     android:text="Some random string." android:layout_gravity="center" android:layout_width="wrap_content"/> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"> 
     <ToggleButton 
      android:id="@+id/A" 
      android:textOn="" 
      android:textOff="" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@layout/A" 
      android:layout_margin="15dip"/> 
     <ToggleButton 
      android:id="@+id/B" 
      android:textOn="" 
      android:textOff="" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@layout/B" 
      android:layout_margin="15dip"/> 
    </LinearLayout> 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center"> 
     <ImageView 
      android:id="@+id/C" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/C" 
      android:layout_margin="15dip"/> 
     <ImageView 
      android:id="@+id/D" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/D" 
      android:layout_margin="15dip"/> 
     <ImageView 
      android:id="@+id/E" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/E" 
      android:layout_margin="15dip"/> 
    </LinearLayout> 

</LinearLayout> 
+0

Y si quiere OP para los botones se expandan, entonces él tiene que reemplazar LinearLayout con RelativeLayout y combinar layout_left/layout_right con márgenes y así sucesivamente. – Audrius

+0

No quiero que los botones se expandan. Quiero que mantengan sus tamaños relativos, "flotando" dentro del espacio más grande que les dan. –

Cuestiones relacionadas