2011-07-11 16 views
19

Tengo un TextView como a continuación. Utilicé este código para establecer el color gris de una parte del texto.Alineación múltiple en TextView?

// Prepare result text. 
final String resultText = text + "\n\n" + dictionaryName; 
final SpannableString styledResultText = new SpannableString(resultText); 
styledResultText.setSpan(new ForegroundColorSpan(Color.GRAY), text.length() + 2, text.length() + 2 + dictionaryName.length(), 0); 
resultTextView.setText(styledResultText); 

Ahora quiero establecer alinear para ello. ¿Cómo hacer? Android no tiene ninguna clase de intervalo para la alineación. No puedo encontrar nada como "AlignmentSpan".

Respuesta

-5

yo sepa esto no es posible. Realmente me gustaría tenerlos como dos campos diferentes. Parece que tiene los datos separados, ¿por qué no simplemente crear un TextView por separado para el texto gris (dictionaryName)?

He intentado usar spannables como menos posible por esta misma razón.

0

Si el texto de resultado siempre se alineará a la derecha, agregue el atributo de gravedad = "derecha" a su resultTextView en lugar de intentar alinear a la derecha el texto con cadenas personalizables. Esto supone que el texto gris está dentro de un TextView por separado de su texto principal.

En XML para el resultado (gris) de texto:

<TextView android:id="@+id/resultTextView" 
    android:gravity="right" 
    android:layout_width="fill_parent" /> 
+0

No, me refiero al texto negro alineado a la izquierda y el texto gris alineado a la derecha. Lo llamo "alineación múltiple". :) – Emerald214

+0

Debería separar el texto negro del texto resultante (tener 2 vistas de texto separadas). –

49

A pesar de su muy tarde para responder, supongo que podría ayudar a alguien por lo menos. Agregue esto a su código.

styledResultText.setSpan(new AlignmentSpan.Standard(Alignment.ALIGN_OPPOSITE), 
text.length() + 2, text.length() + 2 + dictionaryName.length(), 
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

Alignment.ALIGN_OPPOSITE es el equivalente para el lado derecho.

Alignment.ALIGN_NORMAL es el equivalente para el lado izquierdo.

+4

¡Definitivamente esta debería ser la respuesta aceptada! Esto también funciona para centrar texto mediante Alignment.ALIGN_CENTER. – Brandon

+0

Por alguna razón, no puedo hacer que esto funcione en mi TextView. Todas las líneas tienen la misma alineación. – Mahm00d

+7

Esto solo funciona cuando hay al menos 1 carácter de nueva línea (\ n) entre el texto alineado a la izquierda y a la derecha. – Reinier

2

Creo que deberías dividir el texto en más de 1 cadena, colocarlos en una vista de texto separada y luego alinear uno por uno.

Espero que esto ayude.