Xamarin Android 6.0 Java.Lang.NoSuchMethodError 与 View.SetText
Xamarin Android 6.0 Java.Lang.NoSuchMethodError with View.SetText
我为 Label 创建了一个自定义渲染器,将 HTML 代码渲染为文本。
当我尝试设置格式化文本时出现此错误:
未处理的异常:
Java.Lang.NoSuchMethodError: 没有静态方法"Landroid/text/Html;.fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;"发生
这是我的一段代码:
Control.SetText(Html.FromHtml(View.Text.ToString(), FromHtmlOptions.ModeLegacy), TextView.BufferType.Spannable);
这只发生在 Android 6.0 上,从 7.0 开始一切正常。
我该如何解决这个问题?
有解决方法吗?
谢谢!
更新
感谢@Jon Douglas 我用这种方式解决了问题:
if (global::Android.OS.Build.VERSION.SdkInt >= global::Android.OS.BuildVersionCodes.N) {
Control.SetText(Html.FromHtml(View.Text.ToString(), FromHtmlOptions.ModeLegacy), TextView.BufferType.Spannable);
} else {
// For API < 24
Control.SetText(Html.FromHtml(View.Text.ToString()), TextView.BufferType.Normal);
}
对于 "else" 路径,VisualStudio 告诉我它已被弃用,但它仍然可以编译。
您正在使用 API 24 中引入的重载方法。因此,为了正确支持这一点,您将需要一个 runtime check 来检查 < API 24
值,您将在其中使用非 API 24 Html.FromHtml
重载。
请参阅 Html class 了解您可以适当使用的重载。例如:
1 参数方法 < API 24 -
https://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String)
3 < API 24 的参数方法 -
https://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String, android.text.Html.ImageGetter, android.text.Html.TagHandler)
我为 Label 创建了一个自定义渲染器,将 HTML 代码渲染为文本。
当我尝试设置格式化文本时出现此错误:
未处理的异常: Java.Lang.NoSuchMethodError: 没有静态方法"Landroid/text/Html;.fromHtml(Ljava/lang/String;I)Landroid/text/Spanned;"发生
这是我的一段代码:
Control.SetText(Html.FromHtml(View.Text.ToString(), FromHtmlOptions.ModeLegacy), TextView.BufferType.Spannable);
这只发生在 Android 6.0 上,从 7.0 开始一切正常。
我该如何解决这个问题?
有解决方法吗?
谢谢!
更新
感谢@Jon Douglas 我用这种方式解决了问题:
if (global::Android.OS.Build.VERSION.SdkInt >= global::Android.OS.BuildVersionCodes.N) {
Control.SetText(Html.FromHtml(View.Text.ToString(), FromHtmlOptions.ModeLegacy), TextView.BufferType.Spannable);
} else {
// For API < 24
Control.SetText(Html.FromHtml(View.Text.ToString()), TextView.BufferType.Normal);
}
对于 "else" 路径,VisualStudio 告诉我它已被弃用,但它仍然可以编译。
您正在使用 API 24 中引入的重载方法。因此,为了正确支持这一点,您将需要一个 runtime check 来检查 < API 24
值,您将在其中使用非 API 24 Html.FromHtml
重载。
请参阅 Html class 了解您可以适当使用的重载。例如:
1 参数方法 < API 24 - https://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String)
3 < API 24 的参数方法 - https://developer.android.com/reference/android/text/Html.html#fromHtml(java.lang.String, android.text.Html.ImageGetter, android.text.Html.TagHandler)