Não é muito comum, porém possível de ser visto em alguns aplicativos o uso de várias formatações em um mesmo texto. Em uma news headline de uma aplicativo de notícias pode ser visto a aplicação do formato Itálico em uma palavra ou uma cor de fundo que também é aplicado a apenas uma palavra para que ela seja destacada. Ou mesmo no popular aplicativo do Twitter pode ser visto links ou nas hashtags um tipo de texto com fonte diferente e formato diferente.
Como seria isso feito nos códigos? Estariam esses aplicativos usando vários TextViews cada um com seu formato? A resposta está na classe Spannable, que é uma associação a tag <span> do HTML. Essa classe é capaz de receber uma String contendo o texto a ser exibido e proporciona o método setSpan() para que atribuamos estilos à trechos especificadosos por index de início e index fim.
TextView myTextView = (TextView) findViewById(R.id.my_text_view); Spannable sText = new SpannableString("That's my colorful hello world"); sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0); sText.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 9, 0); myTextView .setText(sText);
No exemplo acima, temos a captura de um TextView de um arquivo visual .xml e a inserção nele de um objeto da classe Spannable, que contém um texto com várias formatações. Repare que a instanciação do objeto Spannable não pode ser direta, já que Spannable é uma classe abstrata, sendo assim, instanciamos uma classe filha, SpannableString.
Outro detalhe é o método setSpan() que, como já dito, permite que formatemos parte do texto, informando o index de qual caractere à qual caractere a formatação será aplicada. Veja Como é o cabeçalho do método : setSpan(java.lang.Object oQue, int indexCaractereInicial, int indiceCaractereFinal, int flags).
E por sim, jogamos esse objeto Spannable dentro do objeto TextView através do mesmo método que usamos para inserir um texto no formato String em TextViews, setText().