原生Android Spanned.getSpans(......,SyleSpan.class)
函数返回类型StyleSpan[]
Xamarin ISpanned.GetSpans(......)
函数返回类型Java.lang.Object[]
虽然它在本机中返回<T>
(T
= StyleSpan
)机器人。因此,如果我使用本机SDK,Mono接口不会暴露它将会暴露的内容,因此会丢失信息。
由于本地机器人中的Style
(getStyle()
}仅在StyleSpan
中可用,因此无法读取通过GetSpans读取的给定StyleSpan是粗体还是斜体。
我如何确定粗体或斜体?
这是单声道界面的限制吗?
答案 0 :(得分:4)
你可以做任何事情。 ;)GetSpans
方法没有舒适的通用包装。
ISpanned ss = ...;
var spans = ss.GetSpans(0, 20, Class.FromType(typeof(SyleSpan)));
foreach (SyleSpan span in spans)
{
// do what you want
if(span.Style == TypefaceStyle.Bold)
{
Debug.WriteLine("Xamarin can find bold spans, too :)");
}
}
如果你想访问它通用:
public static class ISpannedExtension
{
public static TSpan[] GetSpans<TSpan>(this ISpanned ss, int startIndex, int length)
{
return ss.GetSpans(startIndex, length, Class.FromType(typeof(TSpan)))
.Cast<TSpan>()
.ToArray();
}
}
// usage
ISpanned ss = ...;
var spans = ss.GetSpans<SyleSpan>(0, 20);