2009-09-30 14 views
15

Realmente estoy tirando de mi cabello sobre este. Algunos antecedentes. Tengo una lista de elementos que tienen casillas de verificación junto a ellos. Cuando anula la selección de una casilla de verificación, aparece un botón que le permite eliminar el elemento de la lista. Esto parece imposible al principio, pero que sólo desea que los elementos "seleccionados" para ser elegibles para su posterior procesamiento, etc. Este es mi diseño:Diseño de Android centrando en RelativeLayout para ListView personalizado

<RelativeLayout android:id="@+id/rlBlahBlah" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:minHeight="?android:attr/listPreferredItemHeight" 
       xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBox android:text="" 
      android:id="@+id/cbDeleteItem" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      android:focusable="false" 
      /> 
    <TextView android:text="" 
      android:id="@+id/tvItemText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="14dip" 
      android:paddingLeft="3dip" 
      android:paddingRight="3dip" 
      android:paddingTop="13dip" 
      android:gravity="fill_vertical" 
      android:layout_toRightOf="@id/cbDeleteItem" 
      /> 
    <Button android:layout_height="wrap_content" 
      android:id="@+id/btnDelete" 
      android:text="Delete" 
      android:layout_width="wrap_content" 
      android:layout_alignParentRight="true" 
      android:gravity="center_vertical" 
      android:focusable="false" 
      /> 
</RelativeLayout> 

no puedo conseguir los 3 elementos para centrar verticalmente en mi fila para salvar mi vida . layout_gravity, gravity, layout_centerVertical, nada de eso funciona. Estoy seguro de que mi problema es un pequeño ajuste para voltear en algún lado, pero estoy realmente al final.

editar: Sé que la vista de texto es "fill_vertical", eso es algo aleatorio que estaba intentando.

+0

Ha intentado jugar con la aplicación de la gravedad atributos a la vista RelativeLayout padres? Merece un intento. – Konklone

Respuesta

24

Su problema no es probablemente debido a la disposición, sino cómo se están inflando el diseño. De hecho, incluso podría ser mi culpa, dependiendo de donde usted aprendió su técnica ...

citar el omnipresente Romain Guy:

el uso correcto de inflado() en adaptadores es:

inflar (layoutId, parent, false);

Pasando el padre (que le ha asignado como parámetro en getView()) permite que el conjunto de herramientas de interfaz de usuario a crear el objeto de las correspondientes LayoutParams. Pasando falso le dice al kit de herramientas que NO llame a parent.addView (theInflateChild), ya que ListView hará su propia magia más tarde en.

Si utiliza inflate(layoutId, null), como he aconsejado tradicionalmente, la vida está bien a menos que se trate de usar RelativeLayout como el diseño de base de las filas y trata de usar centrado vertical.

Voy a actualizar mis libros y tal para reflejar los nuevos consejos en las próximas semanas.

+0

De hecho, estoy usando tu técnica: P También leo una publicación de Romain Guy que dice que RelativeLayout ignora los atributos de layout_gravity. Estoy publicando una respuesta con el nuevo diseño que hace exactamente lo que quiero. ¡Gracias por tu respuesta, sin embargo! – MattC

+0

¡Gracias, me salvaste el día! –

1

Ha intentado androide: gravedad = "center_horizontal" como referencia here

+0

Estoy buscando el centrado vertical dentro del diseño. – MattC

+0

También hay una center_vertical allí. – Carnell

+0

la gravedad centra los elementos dentro de sí mismos como he encontrado. Lo que quería era layout_gravity, pero según una publicación de Romain Guy que leí, RelativeLayout termina ignorando layout_gravity – MattC

2

Aquí hay un diseño que terminó haciendo exactamente lo que yo quería. Me deshice de RelativeLayout una vez que supe que ignora los atributos layout_gravity (por supuesto, ahora no puedo encontrar la publicación). De cualquier manera, LinearLayouts anidados hizo el truco para mí:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:id="@+id/llBlahBlahRowMain" 
    android:padding="6dip"> 
    <CheckBox android:text="" 
       android:id="@+id/cbDeleteItem" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:focusable="false" 
       /> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="center_vertical" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:text="blah blah dynamically replaced text" 
      android:id="@+id/tvItemText" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:textSize="14dip" 
      android:paddingLeft="3dip" 
      android:layout_gravity="center_vertical" 
      /> 
    </LinearLayout> 
    <Button android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/btnDelete" 
      android:text="Delete" 
      android:layout_gravity="center_vertical" 
      android:focusable="false" 
      /> 
</LinearLayout> 
16

Usando RelativeLayout, no he tenido suerte con la gravedad ni layout_gravity.

Pero android:layout_centerVertical="true" funcionó para mí colocado en el hijo de mi RelativeLayout, por lo que puede mantenerlo si lo necesita.

+0

¡Bingo! Solucionado mi problema Gracias. – user1139880

59

Este atributo trabajó para mí centrar una Button usando RelativeLayout:

android:layout_centerInParent="true" 

Ver este anuncio: Can you center a Button in RelativeLayout?

+1

Gracias, a veces realmente vale la pena leer la respuesta de baja calificación. – tjb

+0

La mejor respuesta a esto he encontrado – Albinoswordfish

+1

Muchas gracias, esta debería ser realmente la respuesta aceptada. –

1

Hice una solución alternativa, que trabajó para mí. Puse, en mi elemento de cuadro de texto, la propiedad android: layout_height = "fill_parent". De esta manera, el elemento de texto llenó toda hieght de los padres, por lo que el contenido se alinea correctamente :)

<TextView android:id="@+id/principal_li_descricao" 
    android:layout_height="fill_parent" 
    android:layout_width="wrap_content" 
    android:layout_marginLeft="10dip" 
    android:textColor="#ff000000" 
    android:layout_centerVertical="true" 
    android:gravity="center_vertical" 
    android:layout_alignBottom="@+id/principal_li_icone" 
    android:layout_toRightOf="@+id/principal_li_icone"/> 

Gracias

Cuestiones relacionadas