2009-12-24 16 views
6

Estoy seguro de que me falta algo simple ...androide: LinearLayout simple y pregunta fill_parent

Antecedentes:

Soy nuevo en el diseño de Android y la interfaz de usuario, y yo sólo quería jugar con diseños. En este momento quiero apilar una casilla de verificación en la parte superior de la etiqueta de texto. Estoy utilizando el siguiente esquema XML, que funciona bien:

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

    <CheckBox android:id="@+id/check_box" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/check_box_text" /> 

    <TextView android:id="@+id/dummy_display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/dummy_label" /> 

</LinearLayout> 

mis pruebas (sólo para tener una idea de cómo las cosas funciona):

  • Escenario 1) Cuando me puse la CheckBoxlayout_height a "fill_parent", el CheckBox ocupa toda la pantalla y está alineado en el centro (es decir, el TextView desaparece).

  • Escenario 2) Si en lugar puse el TextView 's layout_height a "fill_parent", la CheckBox hace NO desaparecen. De hecho, nada desaparece, y el diseño tiene el mismo aspecto que el xml anterior, donde todo está insertado en la parte superior izquierda.

la cuestión (y comentarios):

¿Cómo es que el escenario 1 funciona de la forma en que funciona?

Este comportamiento me parece inconsistente. Pensé que fill_parent solo permite que el elemento llene el espacio disponible en el elemento primario. Así que para mí, parece que el TextView debe conseguir cualquier espacio que necesita (ya que es wrap_content), pero el CheckBox debe asumir el resto del espacio (por lo que el TextView se verían obligados a la parte inferior de la pantalla, pero no invisible). En otras palabras ... El escenario 2 tiene sentido para mí, pero el escenario 1 no.

Por favor, explique :-).

Gracias,

Tom

+0

Es posible que desee leer esto (si no es así): ¿Cómo dibuja Android vistas? Enlace: http://developer.android.com/guide/topics/ui/how-android-draws.html – Samuh

Respuesta

13

LinearLayout medidas que los niños como un solo paso de uno en uno, por lo que en el primer ejemplo ve que el primer hijo quiere tener toda la altura disponible que le da a la misma. En su segundo ejemplo, le da todo el lugar disponible al segundo hijo. Si desea casilla de verificación para tomar todo el lugar excepto lugar necesario para la caja de texto que debe cambiar layout_height de casilla para wrap_parent y establecer layout_weight propiedad de cada niño, el peso disposición indica la cantidad de plazas disponibles después todos los niños se midieron debe ser agregar a cada uno de ellos. Para ser más específico, la forma en que funciona por pasos:
1) El elemento principal de LinearLayout le dice al diseño lineal cuán grande puede ser
2) LinearLayout pregunta a todos los elementos para que especifiquen sus parámetros de diseño y distribuyan el espacio disponible.
3) Si cualquier espacio libre que está disponible se distribuye entre los niños de acuerdo con (peso diseño de su peso está entre 0 y 1, 0 - por defecto)
creo que sirve
Editar:
tengo verificó LinearLayout código fuente y descubrió que si un diseño lineal tenía un diseño de parámetros FILL_PARENT y un código de medición de peso cero establecerá la altura de diseño en WRAP_CONTENT y luego distribuirá el espacio entre todos los niños de acuerdo con los pesos.

+0

Hmmm, esto no parece completamente correcto, pero pareces estar cerca. Cuando establezco el peso de la casilla de verificación en 1 ... pero lo MANTENGO como fill_parent para la altura ... funciona como se esperaba. Es decir ... el procesador no solo le da a la casilla de verificación todo el espacio una vez que ve fill_parent para la altura. Entonces todo lo que dices sobre los pesos tiene sentido para mí ... pero no veo cuándo/dónde "fill_parent" se ajusta a este algoritmo de diseño. ¿Vos si? – Tom

+0

ver mi edición para más información. Es por eso que me gusta TAN que siempre es una oportunidad de aprender algo :) –

+0

Si pudiera darle más de un voto, lo haría. Me estaba impulsando NUTS tratando de ver cómo las vistas llenaban todo el espacio disponible, con más espacio para una que otra. Estaba usando una mezcolanza de diseños relativos y no estaba muy lejos. – I82Much