我使用html . fromhtml在TextView中查看html。
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
但是Html.fromHtml现在在Android N+中已弃用
我怎样才能找到做这件事的新方法?
我使用html . fromhtml在TextView中查看html。
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
但是Html.fromHtml现在在Android N+中已弃用
我怎样才能找到做这件事的新方法?
当前回答
你可以使用
//noinspection deprecation
return Html.fromHtml(source);
仅对单个语句而不是整个方法抑制检查。
其他回答
更新: 正如下面提到的@Andy谷歌已经创建了HtmlCompat,可以用来代替下面的方法。添加这个依赖实现androidx.core:core:1.0.1 建造。确保你使用的是androidx.core:core的最新版本。
这允许你使用:
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
你可以在htmlcompat文档中阅读更多关于不同标志的内容
最初的回答: 在Android N中,他们引入了一个新的Html.fromHtml方法。fromhtml现在需要一个额外的参数,名为flags。这个标志让您可以更好地控制HTML的显示方式。
在Android N及以上版本,你应该使用这个新方法。旧的方法已被弃用,并可能在未来的Android版本中被删除。
你可以创建自己的util方法,在旧版本上使用旧方法,在Android N及以上版本上使用新方法。如果你不添加版本检查,你的应用就会在较低的Android版本上崩溃。您可以在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);
}
}
您可以转换HTML。FROM_HTML_MODE_LEGACY变成一个额外的参数。这使您可以更好地控制使用哪个标志。
您可以阅读更多关于不同的标志 Html类文档
比较fromHtml()的标志。
<p style="color: blue;">This is a paragraph with a style</p>
<h4>Heading H4</h4>
<ul>
<li style="color: yellow;">
<font color=\'#FF8000\'>li orange element</font>
</li>
<li>li #2 element</li>
</ul>
<blockquote>This is a blockquote</blockquote>
Text after blockquote
Text before div
<div>This is a div</div>
Text after div
尝试以下支持基本html标签,包括ul ol li标签。 创建一个标签处理程序,如下所示
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.Html;
import android.text.Html.TagHandler;
import android.util.Log;
public class MyTagHandler implements TagHandler {
boolean first= true;
String parent=null;
int index=1;
@Override
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if(tag.equals("ul")) parent="ul";
else if(tag.equals("ol")) parent="ol";
if(tag.equals("li")){
if(parent.equals("ul")){
if(first){
output.append("\n\t•");
first= false;
}else{
first = true;
}
}
else{
if(first){
output.append("\n\t"+index+". ");
first= false;
index++;
}else{
first = true;
}
}
}
}
}
将文本设置为Activity,如下所示
@SuppressWarnings("deprecation")
public void init(){
try {
TextView help = (TextView) findViewById(R.id.help);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
help.setText(Html.fromHtml(getString(R.string.help_html),Html.FROM_HTML_MODE_LEGACY, null, new MyTagHandler()));
} else {
help.setText(Html.fromHtml(getString(R.string.help_html), null, new MyTagHandler()));
}
} catch (Exception e) {
e.printStackTrace();
}
}
和html文本资源字符串文件作为
<![CDATA[…原始HTML数据…]] >
如果你正在使用Kotlin,我通过使用Kotlin扩展来实现这一点:
fun TextView.htmlText(text: String){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setText(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY))
} else {
setText(Html.fromHtml(text))
}
}
然后像这样称呼它:
textView.htmlText(yourHtmlText)
对于Kotlin用户,我们可以使用String.parseAsHtml()扩展函数,它使用HtmlCompat,反过来有兼容性检查。
这可以从androidx.core:core-ktx的android核心kotlin扩展中获得