2011-02-10 11 views
5

que estoy tratando de conseguir una fila de texto que será algo así comodiseño de Android usando layout_weight, layout_width y anchoMax

foofoofoo - barbarbar

pero yo quiero que elipse foo y bar si ganó' t caben en una línea. , es decir, estoy tratando de acortarlos.

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView android:id="@+id/text_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:maxWidth="0dip" 
     android:layout_weight="1" 
     android:textColor="#ffffff" 
     android:singleLine="true" 
     android:ellipsize="true" 
     android:text="foofoofoofoo" /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#ffffff" 
     android:text=" - " /> 
    <TextView 
     android:id="@+id/text_2" 
     android:layout_width="wrap_content"       
     android:layout_height="wrap_content" 
     android:maxWidth="0dip" 
     android:layout_weight="1" 
     android:textColor="#ffffff" 
     android:singleLine="true" 
     android:ellipsize="true" 
     android:text="barbarbarbar" /> 
</LinearLayout> 

Ten en cuenta que esto funciona parcialmente.

fijando el TextView 's layout_width sea 0dip y layout_weight para ser 1 significa que van a tomar hasta el 50% del espacio disponible cada uno.

Ajuste del singleLine a true y ellipsize a true significa que se verá como foofoo ... si el texto es más grande que el recipiente.

Por tanto, mi resultado (si el texto es más largo) debe ser

foofoo .. - .. barbar

Cuál es! Entonces esto funciona

Ahora el caso que estoy tratando de arreglar es, si el primer TextView (id: text_1) tiene texto que es menor que el 50% determinado por layout_width="0dip" y layout_weight="1" quiero que wrap_content. De lo contrario, se parece a:

fooespacio en blanco- barbar ..

y quiero

foo - barbarbar

Es por eso que he cambiado layout_width="wrap_content" y he añadido android:maxWidth="0dip" pero esto no funciona. Parece que me está ignorando diciendo wrap_content y sigue dando esta vista al 50%.

He leído que necesita agregar android:adjustViewBounds="true" para maxWidth para que funcione, pero esto no tuvo ningún efecto.

Respuesta

10

Esto es lo mejor que pude hacer, intente cambiar las cuerdas para ver si funciona como estaba previsto.

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:shrinkColumns="0,2" 
    android:stretchColumns="0,2"> 
    <TableRow> 
     <TextView android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="end" 
      android:text="foofoofoo"/> 
     <TextView android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="-" 
      android:gravity="center_horizontal"/> 
     <TextView android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="end" 
      android:text="barbarbarbarbarbarbarbarbarbarbarbar"/> 
    </TableRow> 
</TableLayout> 
+2

Eliminar el android: stretchColumns = " 0,2 ", y funciona. ¡Hasta ahora de todos modos! :-) Gracias – Blundell

+1

@Blundell wow, ¡soy un cazarrecompensas! me alegro de que funcionó y gracias por el premio. – bigstones

+2

Ayúdanos a los dos. Soy un benefactor :-D – Blundell

2

Es bastante difícil decir exactamente lo que quiere, pero creo que la respuesta es que no puede hacerlo a menos que ajuste dinámicamente su diseño en el código. La razón de esto es porque le está pidiendo al sistema que trabaje de múltiples maneras diferentes.

En primer lugar, desea que las vistas compartan el espacio por igual cuando la cantidad de texto en la vista sea la misma.

En segundo lugar, desea que las vistas NOT compartan el espacio por igual cuando haya menos texto en la otra vista.

Aquí hay muchos otros casos que pueden manejarse de la manera que desee. Sin embargo, lo que estoy tratando de transmitir es que usted está pidiendo el mismo diseño para manejar las cosas de diferentes maneras, por lo que no puede lograrlo con un solo diseño.

+0

Quiero decir básicamente que maxWidth es compartir el espacio (por lo tanto elipsing), pero normalmente solo wrap_content. Así que supongo que sería wrap_content a menos que el valor de inmersión de wrap_content> 50% luego usaría maxWidth (que es el 50%), ¿no? – Blundell

+0

'a menos que el valor de inmersión de wrap_content> 50%, entonces usaría maxWidth' ... Realmente no estoy seguro de lo que intenta decir. 'wrap_content' no usa un valor de inmersión. – user432209

+0

Sí, no, pero maxWidth tiene que interactuar con layout_width de alguna manera. Así que quise decir en segundo plano que debe calcular el ancho del diseño y si es> que maxWidth usa maxWidth. Así que estoy diciendo wrap_content, pero si (en el fondo) wrap_content es> 50% use maxWidth. ¿No es así como funciona? – Blundell

Cuestiones relacionadas