2011-02-25 11 views
14

Por ejemplo:Android: ¿Cómo ajustar el texto con caracteres? (No por palabras)

This is foo text for wrapping text in TextView 

La forma en que TextView envuelve es:

This is foo text for 
wrapping text in ... 

quiero esto:

This is foo text for wr 
apping text in TextView 
+0

Hola, cristiano, estoy buscando la solución exacta, pero no puedo implementar con tu respuesta aceptada. Por favor, hágamelo saber cómo hacer esto en una vista de texto – praveenb

Respuesta

26

Es un poco raro, pero podría reemplazar espacios con el carácter de espacio unicode sin interrupción (U + 00A0). Esto hará que su texto sea tratado como una cadena única y envuelva caracteres en lugar de palabras.

myString.replace(" ", "\u00A0");

+1

No lo llamaría un hack. ¿No es esto exactamente para lo que es el personaje? Funciona como un encanto. –

+1

Bastante justo. Lo llamo una solución hacky porque esta funcionalidad realmente debería integrarse en TextView. El equivalente de iOS, UILabel, le permite establecer el modo de salto de línea y tiene todo tipo de modos de ajuste y truncamiento. – martinp

+0

Esto solo se ocupa de los saltos de línea no deseados causados ​​por espacios. La respuesta a continuación de atarasenko es el verdadero solucionador de problemas, ya que también se ocupa de los saltos de línea no deseados debido a guiones, punto y coma, etc. – j3App

1
public class CharacterWrapTextView extends TextView { 
    public CharacterWrapTextView(Context context) { 
    super(context); 
    } 

    public CharacterWrapTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public CharacterWrapTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    } 

    @Override public void setText(CharSequence text, BufferType type) { 
    super.setText(text.toString().replace(" ", "\u00A0"), type); 
    } 
} 

<com.my.CharacterWrapTextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="text"/> 

enter image description here

(fondo amarillo: Vista de Texto normal)

3

Añadir un invisible espacio de ancho cero ('\ u200B') después de ea ch character:

textView.setText(longlongText.replaceAll(".(?!$)", "$0\u200b")); 

Esto también funciona para cadenas largas que no contienen espacios (por ejemplo, direcciones de enlace). Standard TextView intenta romper un enlace por signo de interrogación '?' y barra '/'.

Cuestiones relacionadas