2010-08-11 24 views
5

Quiero crear un cuadro de entrada con un botón de enviar a la derecha. Entre ellos deben abarcar el ancho de la pantalla. Actualmente tengo:LinearLayout lleno de derecha a izquierda

LinearLayout row= new LinearLayout(context); 
row.setOrientation(HORIZONTAL); 
row.setGravity(Gravity.RIGHT); 
EditText input = new EditText(context); 
Button submit = new Button(context); 
submit.setText("Submit"); 
row.addView(submit); 
row.addView(input,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 
myView.addView(row,LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT); 

Esto se traduce en la correcta distribución del espacio: El botón de enviar ocupando todo el espacio que necesita, el botón de entrada ocupando el espacio restante, sin embargo, son al revés (la el botón de enviar está a la izquierda, a pesar de establecer la gravedad). Si quito la gravedad e invierto el orden de agregar los elementos a la fila, el cuadro de entrada ocupará todo el ancho de la pantalla y el botón de enviar no estará visible. ¿Qué estoy haciendo mal?

Respuesta

4

yo diría que es mejor usar la disposición relativa y el lugar de entrada a la izquierda del botón. Pero si realmente necesita este con la disposición lineal sólo puede utilizar el parámetro de peso:

LinearLayout row= new LinearLayout(context); 
    EditText input = new EditText(context); 
    Button submit = new Button(context); 
    submit.setText("Submit"); 
    LayoutParams inputParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    inputParams.weight = 1; 
    row.addView(input,inputParams); 
    LayoutParams buttonParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    buttonParams.weight = 0; 
    row.addView(submit, buttonParams); 
+1

Y sí, creo que no es una buena idea formar diseños desde el código. Haga esto solo si el diseño xml no es posible para su caso. –

+0

Todavía soy relativamente nuevo en Android, y hasta ahora todo en este proyecto está basado en código. Usaré xml en proyectos futuros, pero por ahora tomaré la solución de código. – fredley

0

Los elementos se acumulan en LinearLayout en el orden en que los agregó. Cambia tus dos llamadas addView.

Normalmente es más fácil lograr el diseño correcto con los archivos xml de diseño. Es decir:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

    <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 
+0

Hmmm. Parece contra-intuitivo que debería configurar la Gravedad para que esté CORRECTA, entonces las cosas deberían apilarse desde la Izquierda. Oh bien. – fredley

+0

Eso no es lo que significa la gravedad: http://developer.android.com/reference/android/view/Gravity.html –

3

Trate de añadir EditText primera configuración de su anchura a fill parent y su peso a 1, a continuación, el botón (width = wrap content)

0

Si también es necesario alinear los botones en la siguiente línea, también se puede utilizar un TableLayout. Mire las apidemos para la muestra del código.

Cuestiones relacionadas