2010-04-27 22 views
6

Estoy tratando de obtener algo como esto: http://img202.imageshack.us/img202/552/layoutoy.png. Estoy usando esto como un elemento de lista (técnicamente como la vista de grupo de una ExpandableListView).¿Cómo alinear el botón a la derecha, sin estar superpuesto por TextView?

Aquí está el archivo XML:

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

    <TextView 
     android:id="@+id/list_item_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" /> 

    <Button 
     android:id="@+id/list_item_button" 
     android:text="Click me!" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_toRightOf="@id/list_item_text" /> 

</RelativeLayout> 

Pero esto no funciona. El botón no envuelve su contenido, sino que usa todo el espacio horizontal disponible. El TextView hace que envuelva su contenido, pero lo que quiero que haga es cortar cuando se solapa con el Botón.

En otras palabras, quiero que todos los botones tengan el mismo ancho, independientemente de la cantidad de texto en las textviews. ¿Es esto posible?

Respuesta

5

Creo que deberías intentarlo al revés. Haga que TextView esté a la izquierda del botón. De esta forma, Textview no se superpondrá al botón. Si desea cortarlo al final de la línea, debe restringirlo a una línea. En este momento, simplemente movería el resto del texto a la siguiente línea.

Esto debe hacer el truco:

<Button 
    android:id="@+id/list_item_button" 
    android:text="Click me!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true"/> 

<TextView 
    android:id="@+id/list_item_text" 
    android:text="veryveryveryveryveryveryveryveryveryverylong" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/list_item_button" 
    android:ellipsize="end" /> 

</RelativeLayout> 
+0

Eso hizo el truco, ¡salud! – benvd

+0

+1. ¡Buen pensamiento! – Tiago

4

Antes de que alguien intenta el método mostrado anteriormente (con la RelativeLayout), se debe utilizar para este LinearLayout. Los pesos deben establecerse correctamente: el elemento que necesita ocupar el espacio vacío debe tener un peso de 1 y ancho establecido en fill_parent, el elemento que debe mantener su tamaño mínimo debe tener un peso de 0 con un ancho de resumir contenido.

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight"> 
<TextView 
    android:id="@+id/list_item_text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight=1 
    android:ellipsize="end" /> 

<Button 
    android:id="@+id/list_item_button" 
    android:text="Click me!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight=0/> 

</LinearLayout> 
Cuestiones relacionadas