5

Tengo un TextView alineado a la izquierda y un botón alineado a la derecha uno al lado del otro. Quiero que el botón ocupe tanto espacio como lo necesite a la derecha (según el texto que aparezca) y el texto de la izquierda para llenar todo lo que pueda y elipsify en cualquier desbordamiento.Android TextView y botón uno al lado del otro, ellipsize dejó TextView

|Long title that may or may not ellipsi... <Button with text>| 

He leído y probado muchas otras publicaciones que parecen tener problemas similares, ninguna de las cuales me ha funcionado. Intenté usar tanto un LinearLayout con pesos como un RelativeLayout con layout_toLeftOf asignado, ninguno de los cuales da como resultado lo que necesito.

Este es mi código LinearLayout (con las partes innecesarias retiradas) donde le doy a TextView left un layout_weight de 1 y el botón a layout_weight de 0. Esto debería dar al botón derecho todo el espacio que necesita y dar el TextView el resto, pero en su lugar, el título izquierdo deja de aparecer y el botón derecho se deshace hacia un lado y se corta. He intentado reemplazar el ancho del Texto y el botón a 0 como lo he sugerido, lo que no cambia nada.

<LinearLayout 
    android:layout_height="@dimen/title_bar_height" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ellipsize="end" 
     android:layout_gravity="left|center_vertical" 
     android:gravity="left|center_vertical" 
     android:textSize="22sp" 
     android:lines="1"/> 
    <include layout="@layout/action_buttons" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="0"/> 
</LinearLayout> 

Sustitución de la layout_weight del TextView con 0 en realidad permite que el botón del lado derecho para encajar correctamente en la pantalla por completo, pero el texto a la izquierda aún no se presenta. Si tengo layout_weights puestos a 0 para TextView y el botón y luego cambio el ancho de TextView de 0dip a wrap_content, todo aparece pero el botón en su lugar es aplastado para llenar el espacio restante (y el texto interno se trunca).

Aquí está mi intento con un RelativeLayout:

<RelativeLayout 
    android:layout_height="@dimen/title_bar_height" 
    android:layout_width="wrap_content"> 
    <include layout="@layout/action_buttons"/> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center_vertical" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@layout/action_buttons" 
     android:gravity="center_vertical" 
     android:scaleType="center" 
     android:textSize="22sp" 
     android:ellipsize="end" 
     android:lines="1"/> 
</RelativeLayout> 

Todo alinea bien y se muestra, excepto que el TextView izquierda (cuando es demasiado largo) se superpone y aparece en la parte superior del botón en lugar de truncar y ellipsizing . ¿No debería android: layout_toLeftOf "@ layout/action_buttons" especificar que TextView debería permanecer en el límite izquierdo del botón?

He intentado aparentemente todo lo que puedo encontrar en este sitio relacionado con este problema, y ​​todavía no puedo encontrar una solución. ¡Cualquier ayuda sería muy apreciada!

+0

Con su ' RelativeLayout' intento, ¿has probado 'android: layout_width =" wrap_content "' para evitar que 'TextView' se superponga al' Botón' cuando el texto es largo? – Squonk

+0

Sí, tanto android: layout_width = "wrap_content" y android: layout_width = "fill_parent" para el TextView dan el mismo problema de superposición. – socoho

+0

Lo he intentado durante aproximadamente 30 minutos en el editor de diseño de eclipse y no puedo encontrar una respuesta, pero de nuevo los diseños no son mi punto más fuerte. Si no lo ha resuelto en 48 horas, agregue un comentario aquí comenzando con @MisterSquonk y debería alertarme: voy a poner una recompensa sobre la pregunta para ver si atrae a cualquier gurú de diseño. Sin embargo, toma 48 horas antes de que una pregunta sea elegible para una recompensa. – Squonk

Respuesta

17

Esto va a hacer el truco para usted:

<?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="wrap_content" 
    android:orientation="horizontal" > 
    <TextView 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="left|center_vertical" 
     android:layout_weight="1" 
     android:ellipsize="end" 
     android:gravity="left|center_vertical" 
     android:singleLine="true" 
     android:text="Some really long textttttttttt tooooooooooo make the ellipsize work in the preview" 
     android:textSize="22sp" /> 
    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button Text" /> 
</LinearLayout> 

Esto es lo que parece cuando ejecute: Shorter Button

Y de nuevo con un botón con más texto: Longer Button

+0

¡Muchas gracias! Esto funciona :) resulta que lo principal que causaba mi problema era el botón personalizado que estoy usando. – socoho

+2

Nota: con esta solución, el botón siempre está alineado a la derecha ... todavía está intentando encontrar una solución donde el elemento derecho se mueve hacia la izquierda para permanecer al lado del texto si el texto es pequeño – Thymine