Xamarin:确定GetSpans()中的元素是粗体还是斜体?

时间:2016-06-28 14:57:13

标签: android xamarin mono xamarin.android

原生Android Spanned.getSpans(......,SyleSpan.class)函数返回类型StyleSpan[]

Xamarin ISpanned.GetSpans(......)函数返回类型Java.lang.Object[]虽然它在本机中返回<T>T = StyleSpan)机器人。因此,如果我使用本机SDK,Mono接口不会暴露它将会暴露的内容,因此会丢失信息。

由于本地机器人中的StylegetStyle()}仅在StyleSpan中可用,因此无法读取通过GetSpans读取的给定StyleSpan是粗体还是斜体。

我如何确定粗体斜体

这是单声道界面的限制吗?

1 个答案:

答案 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);