update : como @ Andy mencionado abaixo, o Google criou o HtmlCompat
que pode ser usado em vez do método abaixo. Adicione essa dependência implementation 'androidx.core:core:1.0.1
ao arquivo build.gradle do seu aplicativo. Certifique-se de usar a versão mais recente do androidx.core:core
.
Isso permite que você use:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Você pode ler mais sobre os diferentes sinalizadores na documentação HtmlCompat
resposta original:
No Android N, eles introduziram um novo Html.fromHtml
método. Html.fromHtml
agora requer um parâmetro adicional, chamado flags. Esse sinalizador oferece mais controle sobre como o HTML é exibido.
No Android N e acima, você deve usar esse novo método. O método mais antigo está obsoleto e pode ser removido nas futuras versões do Android.
Você pode criar seu próprio método Util, que usará o método antigo em versões mais antigas e o mais recente no Android N e acima. Se você não adicionar uma versão, verifique se o aplicativo será interrompido nas versões inferiores do Android. Você pode usar esse método na sua classe Util.
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
if(html == null){
// return an empty spannable if the html is null
return new SpannableString("");
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// FROM_HTML_MODE_LEGACY is the behaviour that was used for versions below android N
// we are using this flag to give a consistent behaviour
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(html);
}
}
Você pode converter o HTML.FROM_HTML_MODE_LEGACY
parâmetro em um parâmetro adicional, se desejar. Isso lhe dá mais controle sobre qual sinalizador usar.
Você pode ler mais sobre os diferentes sinalizadores na
documentação da classe Html
Html.FROM_HTML_MODE_LEGACY
//noinspection deprecation
comentário logo abaixo doelse
para evitar avisos de fiapos.Eu tinha muitos desses avisos e sempre uso FROM_HTML_MODE_LEGACY, então criei uma classe auxiliar chamada HtmlCompat contendo o seguinte:
fonte
Compare as bandeiras de fromHtml ().
fonte
Ou você pode usar
androidx.core.text.HtmlCompat
:Documentos HtmlCompat
fonte
Se você tiver sorte o suficiente para desenvolver no Kotlin, basta criar uma função de extensão:
E é tão bom usá-lo em qualquer lugar:
fonte
Spanned
ereturn
fromHtml
Você deve usar FROM_HTML_MODE_LEGACY
Código
Para Kotlin
Ligar
fonte
HtmlCompat.fromHtml("textWithHtmlTags", HtmlCompat.FROM_HTML_MODE_LEGACY)
Do documento oficial:
https://developer.android.com/reference/android/text/Html.html
fonte
Se você estiver usando o Kotlin , consegui isso usando uma extensão do Kotlin:
Então chame assim:
fonte
Apenas para estender a resposta de @Rockney e @ k2col, o código aprimorado pode se parecer com:
Onde
CompatUtils.isApiNonLowerThan
:A diferença é que não há variável local extra e a depreciação ocorre apenas em
else
ramificação. Portanto, isso não suprimirá todo método, exceto uma ramificação única.Pode ajudar quando o Google decidir em algumas versões futuras do Android descontinuar o
fromHtml(String source, int flags)
método.fonte
Você pode usar
suprimir a inspeção apenas para uma única declaração, mas não para todo o método.
fonte
A classe de estrutura foi modificada para exigir um sinalizador para informar
fromHtml()
como processar quebras de linha. Isso foi adicionado ao Nougat e aborda apenas o desafio das incompatibilidades dessa classe nas versões do Android.Publiquei uma biblioteca de compatibilidade para padronizar e suportar a classe e incluir mais retornos de chamada para elementos e estilo:
Embora seja semelhante à classe Html da estrutura, algumas alterações de assinatura foram necessárias para permitir mais retornos de chamada. Aqui está o exemplo da página do GitHub:
fonte
minSdkVersion 15
etargetSdkVersion 23
recebo um erro de construção para values-v24.xml :Error:(3) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Borderless.Colored'.
Sua biblioteca é direcionada ao nível 25 da API, obviamente. Como ainda posso usá-lo?Aqui está a minha solução.
fonte
basta fazer uma função:
fonte
Tente o seguinte para oferecer suporte a tags html básicas, incluindo tags ul ol li. Crie um manipulador de tags, como mostrado abaixo
Defina o texto em Atividade, como mostrado abaixo
E texto html em arquivos de cadeia de recursos como
<! [CDATA [... dados html brutos ...]]>
fonte