2013-03-19 10 views
7

Utilizzo diverse visualizzazioni di testo con un uso intensivo di span.Span Android o spazio non interruttivo Causa interruzione di riga e duplicazione di testo (4.0 ICS)

Il problema: A volte nella mia app (in particolare su Ice Cream Sandwich) vedrò un'interruzione di riga che non si trova nella stringa di testo, insieme alla duplicazione del testo. Vedi l'immagine qui sotto per un esempio. Osserva come inizia la terza frase, poi c'è un'interruzione di riga, quindi il testo viene duplicato e la frase finisce.

enter image description here

Codice:

tv = (TextView) inflater.inflate(R.layout.fragment_reader_list_item, parent, false); 
SpannableStringBuilder ssb = ssbList.get(position); 
tv.setText(ssb, BufferType.SPANNABLE); 

Quando il debug nel codice, la variabile 'SSB' correttamente contiene solo il testo ... "3 non spadroneggiando sulle persone a voi affidate, ma essendo un esempio per il gregge. 4 E quando il capo "...

Alcuni dettagli che ho notato dal giocarci intorno per alcune ore: Le condizioni che causano il bug sembrano avere qualcosa con con la larghezza complessiva del testo renderizzato. Per esempio, con il testo nella foto sopra, se spengo il grassetto sui numeri, il testo nella foto verrà mostrato correttamente, tuttavia se lascio la spaziatura in grassetto, togliendo la spaziatura del numero di colori sul cambiamento (che non cambia il larghezza), il problema persiste.

Vale anche la pena notare che dopo ogni numero sto usando uno spazio non interrotto. Se scambio lo spazio non-breaking con uno spazio di interruzione, non vedo più il problema, ma è più o meno probabilmente perché la stringa renderizzata cambia. Questo problema potrebbe non avere nulla a che fare con gli span, ma sembra un errore troppo grande da passare con qualsiasi vecchio testo.

Qualsiasi aiuto è molto apprezzato!

MODIFICA: Questo bug sembra fortemente legato all'uso della durata in grassetto. Toglierlo dai numeri risolve il problema. Questo è quello a cui ho attualmente fatto ricorso come soluzione. Sarebbe bello se ci fosse un'opzione migliore.

+0

Sei alla ricerca di specifiche su come rendere la vostra linea di testo in modo corretto? Non ero sicuro che se avessi una domanda o semplicemente avessi segnalato qualche malore – Martin

+0

stavo solo cercando di farlo funzionare senza dover sacrificare sugli stili (ad esempio rimuovendo la spaziatura in grassetto per farlo funzionare). – spierce7

risposta

0

per quanto ho capito il tuo problema, basta usare un altro SpannableStrinBuilder sb e impostare il testo in sb come definito di seguito. sto rimuovendo schede e nuove linee.

SpannableStringBuilder sb = new SpannableStringBuilder(); 
for(int loop=0 ; loop<(str.length() -1); loop++) 
{ 
    if(!(str.subSequence(loop, loop+1).equals("\t") || 
     str.subSequence(loop, loop+1).equals("\n")) 
    ) 
    { 
    sb.append(str.charAt(loop)); 
    } 
} 
+0

Hai frainteso il mio problema. Non ci sono schede o nuove linee, tuttavia vengono mostrate con loro. Guarda la foto che ho postato un po 'più attentamente. – spierce7

+0

hai provato a sostituire la funzione dopo aver impostato il testo nella visualizzazione del testo? –

Problemi correlati