2012-11-12 20 views

risposta

3

Quando ho avuto bisogno di testo formattato in passato, ho creato un file html con formattazione, lo ho inserito nella directory res/raw e caricato in una WebView. Non l'ho mai provato con font diversi prima però non sono sicuro che funzionerà, ma grassetto, corsivo, ecc. Funzioneranno.

14

Dopo aver letto il titolo della domanda, ero pronto a darti un link per quell'articolo esatto. Ho trovato utilizzando span e SpannableString per essere abbastanza potente. L'alternativa sarebbe utilizzare la formattazione HTML per il testo, che può essere eseguita con Html.fromHtml().

Tuttavia, Non è esattamente chiaro quali tag HTML sono supportati, in quanto la documentazione legge semplicemente:

Questa classe elabora stringhe HTML in testo formattato visualizzabile. Non tutti i tag HTML sono supportati.

Quindi, per una buona soluzione, sceglierei l'approccio SpannableString nell'articolo. Questo metodo è molto pratico in pratica poiché puoi anche creare classi di estensione che estendono quelle esistenti (ad esempio, se desideri che una sezione di testo utilizzi un carattere personalizzato che non è incorporato).

+0

Bella risposta, SpannableString è uno strumento davvero potente per questo. Sono stato ispirato da quella classe per creare una libreria RichTextView che utilizza SpannableString sotto il cofano ma semplifica l'utilizzo per gli sviluppatori: http://stackoverflow.com/a/36404986/3131147 – AdamMc331

6

Ho scritto una biblioteca durante il fine settimana che gestisce questo, l'ho chiamato uno RichTextView.

La libreria consente di formattare un intervallo di testo (renderlo in grassetto, sottolineato, corsivo, combinazione, ecc.) E colorarlo (colore del testo e evidenziazione). Nella prossima versione ho intenzione di prevedere font personalizzati e così pure.

Per utilizzarlo è semplice, basta aggiungere il seguente dipendenza al file Gradle:

compile 'com.androidessence.lib:richtextview:1.0.1' 

Ora, diciamo che si vuole fare i primi quattro caratteri in grassetto, si può semplicemente fare la seguente chiamata:

Si noti che il parametro di indice finale non è compreso, quindi dicendo (0 -> 4) siamo in realtà indici in grassetto (0 -> 3).

Se volete fare entrambe le cose grassetto e sottolineato, utilizzare un EnumSet:

myRichTextView.formatSpan(0, 4, EnumSet.of(RichTextView.FormatType.BOLD, RichTextView.FormatType.UNDERLINE)); 

Per le ultime informazioni si prega di consultare il repository Github legata sopra, anche se cercherò di aggiornare questa risposta qualsiasi momento diventa obsolete.

+0

Beautiful! Questa dovrebbe essere la risposta accettata. –

+0

Proprio così, Tristan; lol – Eenvincible

+0

Lib meravigliosa, molto più semplice da usare rispetto all'altra soluzione. – Mauker

Problemi correlati