Não se esqueça de escapar da entrada do usuário usando Html.escapeHtml(str).
precisa saber é o seguinte
1
Adicionado na API nível 1
2red13
3
Apenas um aviso. Eu estava tendo um problema quando precisava que meu texto estivesse em maiúsculas. Eu estava usando android: textAllCaps = "true" em XML e, ao mesmo tempo, tinha meu conteúdo HTML em maiúsculas. Não estava funcionando. Eu removi o atributo XML e agora está funcionando bem. Cuidado, pois se você usar setAllCaps () no código, o mesmo problema será exibido.
ótimo, obrigado, também pode fazer BackgroundColorSpan. existe um pequeno erro de digitação no seu exemplo, WordToSpan e WordtoSpan, observe o caso em To
Não está funcionando para mim, recebendo `java.lang.StringIndexOutOfBoundsException: length = 3; index = 12`
Muhammad Babar
1
StringIndexOutOfBoundsException em si explicativo. Você está acessando a string além do comprimento.
Swapnil Kotwal
1
Minhas seqüências de caracteres não foram corrigidas; portanto, elas seriam geradas no tempo de execução do aplicativo. Eu tentei quase todas as respostas desta pergunta. Mas apenas essa solução funcionou para mim.
Sr. Sabbir Ahmed, 15/04/19
33
Você pode usar Spannablepara aplicar efeitos ao seuTextView :
Aqui está o meu exemplo para colorir apenas a primeira parte de um TextViewtexto (enquanto permite que você defina a cor dinamicamente, em vez de codificá-la em uma String, como no exemplo HTML!)
mTextView.setText("Red text is here",BufferType.SPANNABLE);Spannable span =(Spannable) mTextView.getText();
span.setSpan(newForegroundColorSpan(0xFFFF0000),0,"Red".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Neste exemplo, você pode substituir 0xFFFF0000 por um getResources().getColor(R.color.red)
TextView textView=(TextView)findViewById(R.id.yourTextView);//init//here I am appending two string into my textView with two diff colors.//I have done from fragment so I used here getActivity(), //If you are trying it from Activity then pass className.this or this;
textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));
Dentro de sua classe TextViewUtils, adicione este método
/***
*
* @param mString this will setup to your textView
* @param colorId text will fill with this color.
* @return string with color, it will append to textView.
*/publicstaticSpannable getColoredString(String mString,int colorId){Spannable spannable =newSpannableString(mString);
spannable.setSpan(newForegroundColorSpan(colorId),0, spannable.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);Log.d(TAG,spannable.toString());return spannable;}
Eu atualizei agora, verifique uma vez, está funcionando para mim.
Abdul Rizwan
Myabe você usa Html.fromHtml para usar esta string?
Sergey Shustikov
dentro do arquivo string.xml Eu criei uma variável e defini isso, está funcionando para mim agora. Estou fazendo isso, você pode fornecer sua string aqui.
Abdul Rizwan
5
É melhor usar a string no arquivo de strings, assim:
<stringname="some_text">
<![CDATA[
normal color <fontcolor=\'#06a7eb\'>special color</font>]]>
</string>
Eu escrevi algum código para outra pergunta que é semelhante a esta, mas essa pergunta foi duplicada, por isso não posso responder por isso, estou apenas colocando meu código aqui se alguém estiver procurando pelo mesmo requisito.
Não é um código totalmente funcional, você precisa fazer pequenas alterações para que ele funcione.
Aqui está o código:
Eu usei a ideia do @Graeme de usar texto que pode ser expandido.
String colorfulText ="colorfulText";Spannable span =newSpannableString(colorfulText);for(int i =0, len = colorfulText.length(); i < len; i++){
span.setSpan(newForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);
Use a classe SpannableBuilder em vez da formatação HTML sempre que possível, porque é mais rápida que a análise do formato HTML. Veja meu próprio benchmark "SpannableBuilder vs HTML" no Github
Obrigado!
Respostas impressionantes! Consegui usar o Spannable para criar texto colorido arco-íris (para que isso pudesse ser repetido para qualquer matriz de cores). Aqui está o meu método, se ajudar alguém:
privateSpannable buildRainbowText(String pack_name){int[] colors =newint[]{Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE,Color.RED,0xFFFF9933,Color.YELLOW,Color.GREEN,Color.BLUE};Spannable word =newSpannableString(pack_name);for(int i =0; i < word.length(); i++){
word.setSpan(newForegroundColorSpan(colors[i]), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}return word;}
E então eu apenas setText (buildRainboxText (pack_name)); Observe que todas as palavras que eu passo são menores de 15 caracteres e isso apenas repete 5 cores 3 vezes - convém ajustar as cores / comprimento da matriz para seu uso!
Desde a API 24, você tem FROM_HTML_OPTION_USE_CSS_COLORS para poder definir cores no CSS em vez de repeti-lo o tempo todo com font color="
muito mais claro - quando você tem um html e deseja destacar algumas tags predefinidas - basta adicionar fragmento de CSS na parte superior do html
Respostas:
sim, se você formatar o
String
comhtml
'sfont-color
propriedade, em seguida, passá-lo para o métodoHtml.fromHtml(your text here)
fonte
Html.escapeHtml(str)
.Html.fromHtml(String)
agora está obsoleto; em vez disso, useHtml.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Mais informações podem ser encontradas aqui.Você pode imprimir linhas com várias cores sem HTML como:
fonte
Você pode usar
Spannable
para aplicar efeitos ao seuTextView
:Aqui está o meu exemplo para colorir apenas a primeira parte de um
TextView
texto (enquanto permite que você defina a cor dinamicamente, em vez de codificá-la em uma String, como no exemplo HTML!)Neste exemplo, você pode substituir 0xFFFF0000 por um
getResources().getColor(R.color.red)
fonte
Eu fiz assim:
Jogo de cor no texto pela passagem de Cordas e cor :
Defina o texto no TextView / Button / EditText etc chamando o código abaixo:
TextView:
Obter sequência colorida:
Defina Texto no TextView de duas seqüências de caracteres com cores diferentes:
Feito
fonte
Html.fromHtml("...")
por chamadas paraHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Use SpannableStringBuilder
fonte
Ei pessoal, eu fiz isso, tente
Dentro de sua classe TextViewUtils, adicione este método
fonte
É melhor usar a string no arquivo de strings, assim:
Uso:
fonte
Eu escrevi algum código para outra pergunta que é semelhante a esta, mas essa pergunta foi duplicada, por isso não posso responder por isso, estou apenas colocando meu código aqui se alguém estiver procurando pelo mesmo requisito.
Não é um código totalmente funcional, você precisa fazer pequenas alterações para que ele funcione.
Aqui está o código:
Eu usei a ideia do @Graeme de usar texto que pode ser expandido.
Método de cor aleatória:
fonte
Tente o seguinte:
fonte
Use a classe SpannableBuilder em vez da formatação HTML sempre que possível, porque é mais rápida que a análise do formato HTML. Veja meu próprio benchmark "SpannableBuilder vs HTML" no Github Obrigado!
fonte
Respostas impressionantes! Consegui usar o Spannable para criar texto colorido arco-íris (para que isso pudesse ser repetido para qualquer matriz de cores). Aqui está o meu método, se ajudar alguém:
E então eu apenas setText (buildRainboxText (pack_name)); Observe que todas as palavras que eu passo são menores de 15 caracteres e isso apenas repete 5 cores 3 vezes - convém ajustar as cores / comprimento da matriz para seu uso!
fonte
para 24 API e mais (sinalizador)
Mais informações
fonte
Desde a API 24, você tem FROM_HTML_OPTION_USE_CSS_COLORS para poder definir cores no CSS em vez de repeti-lo o tempo todo com
font color="
muito mais claro - quando você tem um html e deseja destacar algumas tags predefinidas - basta adicionar fragmento de CSS na parte superior do htmlfonte
25 de junho de 2020 por @canerkaseler
Depois, chame a função acima. Você pode ligar para mais de um:
Saída: você pode ver cores sublinhadas e diferentes entre si.
@canerkaseler
fonte