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)