Ald*_*asa 266 android deprecated android-7.0-nougat
我Html.fromHtml
用来查看html TextView
.
Spanned result = Html.fromHtml(mNews.getTitle());
...
...
mNewsTitle.setText(result);
Run Code Online (Sandbox Code Playgroud)
但Html.fromHtml
现在已经在Android N +中弃用了
我/我如何找到新的方法?
Roc*_*ney 554
您必须在Android M及更高版本上添加版本检查并使用旧方法,在Android N及更高版本上,您应该使用新方法.如果您不添加版本检查,您的应用将在较低的Android版本上中断.您可以在Util类中使用此方法.
HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY);
Run Code Online (Sandbox Code Playgroud)
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在Html类文档中阅读有关不同标志的更多信息
k2c*_*col 92
我有很多这些警告,我总是使用FROM_HTML_MODE_LEGACY,所以我创建了一个名为HtmlCompat的辅助类,其中包含以下内容:
@SuppressWarnings("deprecation")
public static Spanned fromHtml(String source) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY);
} else {
return Html.fromHtml(source);
}
}
Run Code Online (Sandbox Code Playgroud)
Xan*_*Xan 56
比较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
Run Code Online (Sandbox Code Playgroud)
And*_*ndy 29
或者您可以使用androidx.core.text.HtmlCompat
:
HtmlCompat.fromHtml("<b>HTML</b>", HtmlCompat.FROM_HTML_MODE_LEGACY)
Run Code Online (Sandbox Code Playgroud)
Leo*_*der 24
如果你足够幸运在Kotlin上开发,只需创建一个扩展功能:
fun String.toSpanned(): Spanned {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
@Suppress("DEPRECATION")
return Html.fromHtml(this)
}
}
Run Code Online (Sandbox Code Playgroud)
然后到处使用它真是太好了:
yourTextView.text = anyString.toSpanned()
Run Code Online (Sandbox Code Playgroud)
Int*_*iya 14
此方法在API级别24中
已弃用.
在两者之间使用空行(两个换行符)分隔块级元素.这是N之前的遗留行为.
码
if (Build.VERSION.SDK_INT >= 24)
{
etOBJ.setText(Html.fromHtml("Intellij \n Amiyo",Html.FROM_HTML_MODE_LEGACY));
}
else
{
etOBJ.setText(Html.fromHtml("Intellij \n Amiyo"));
}
Run Code Online (Sandbox Code Playgroud)
对于Kotlin
fun setTextHTML(html: String): Spanned
{
val result: Spanned = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(html)
}
return result
}
Run Code Online (Sandbox Code Playgroud)
呼叫
txt_OBJ.text = setTextHTML("IIT Amiyo")
Run Code Online (Sandbox Code Playgroud)
来自官方文件:
fromHtml(String)
方法在API级别24中已弃用.请fromHtml(String, int)
改用.
TO_HTML_PARAGRAPH_LINES_CONSECUTIVE
选项toHtml(Spanned, int)
:包裹由'\n'
内部<p>
元素分隔的连续文本行.
TO_HTML_PARAGRAPH_LINES_INDIVIDUAL
选项toHtml(Spanned, int)
:包裹由'\n'
a<p>
或<li>
元素内部分隔的每行文本.
https://developer.android.com/reference/android/text/Html.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))
}
}
Run Code Online (Sandbox Code Playgroud)
然后像这样调用它:
textView.htmlText(yourHtmlText)
Run Code Online (Sandbox Code Playgroud)
对于 Kotlin 用户,我们可以使用String.parseAsHtml()
使用 HtmlCompat 的扩展函数,而HtmlCompat又具有兼容性检查。
这可以从 android core kotlin 扩展中获得,可以从androidx.core:core-ktx
只是为了扩展@Rockney和@ k2col的答案,改进后的代码可能如下所示:
@NonNull
public static Spanned fromHtml(@NonNull String html) {
if (CompatUtils.isApiNonLowerThan(VERSION_CODES.N)) {
return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
return Html.fromHtml(html);
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里CompatUtils.isApiNonLowerThan
:
public static boolean isApiNonLowerThan(int versionCode) {
return Build.VERSION.SDK_INT >= versionCode;
}
Run Code Online (Sandbox Code Playgroud)
不同之处在于没有额外的局部变量,并且弃用仅在else
分支中.所以这不会压制所有方法而是单个分支.
当Google决定在Android的某些未来版本中弃用甚至该fromHtml(String source, int flags)
方法时,它会有所帮助.