Estou tentando alterar o texto de uma visualização TextView por meio do método .setText ("") enquanto também coloro uma parte do texto (ou tornando-o em negrito, itálico, transparente, etc.) e não o resto. Por exemplo:
title.setText("Your big island <b>ADVENTURE!</b>";
Eu sei que o código acima está incorreto, mas ajuda a ilustrar o que eu gostaria de alcançar. Como eu faria isso?
Respostas:
Use spans .
Exemplo:
fonte
fonte
<font color="#FFAADD>text</font>
não vai funcionar?Espero que isso ajude você (funciona com vários idiomas).
E em seu código java, você pode fazer:
Desta forma, apenas a parte "Teste" ficará colorida (e em negrito).
fonte
Aqui está um exemplo que procurará todas as ocorrências de uma palavra (não diferencia maiúsculas de minúsculas) e as colorirá de vermelho:
fonte
Você pode usar um
Spannable
para dar certos aspectos a certas partes de um texto. Posso procurar um exemplo, se quiser.Ah, daqui em diante stackoverflow .
fonte
Se estiver usando Kotlin, você pode fazer o seguinte usando a biblioteca android-ktx
A
bold
é uma função de extensão onSpannableStringBuilder
. Você pode ver a documentação aqui para uma lista de operações que você pode usar.Outro exemplo:
Onde
green
está uma cor RGB resolvida.É até possível aninhar spans para que você termine com algo como um DSL incorporado:
Você precisará do seguinte em seu nível de módulo de aplicativo
build.gradle
para que ele funcione:fonte
val spannableStringBuilder = SpannableStringBuilder() spannableStringBuilder.bold { underline { color(R.color.test_color) { append(underlinedText) } } }
Se você quiser usar HTML, você precisa usar
TextView.setText(Html.fromHtml(String htmlString))
Se você quiser fazer isso com frequência / repetidamente, dê uma olhada em uma classe ( SpannableBuilder ) que escrevi, pois
Html.fromHtml()
não é muito eficiente (usa uma grande máquina de análise xml interna). É descrito nesta postagem do blog .fonte
Usando
fonte
ou use este código:
fonte
Eu gosto de usar
SpannableStringBuilder
anexando os diferentes intervalos um por um, em vez de chamar setSpan calculando os comprimentos de stringcomo: (código Kotlin)
fonte
Você pode concatenar dois ou mais Spans. Desta forma, é mais fácil colorir o texto dinâmico usando o valor do comprimento.
fonte
Use este código é útil
fonte
Html.fromHtml
está obsoletoEm vez disso, use HtmlCompat
fonte