原生Android Spanned.getSpans(......,SyleSpan.class)函数返回类型StyleSpan[]
Xamarin ISpanned.GetSpans(......)函数返回类型ISpanned.GetSpans(......) Java.lang.Object[]尽管它在本机android中返回<T> (在我的情况下为T = StyleSpan )。 因此,如果我使用本机SDK,Mono接口不会暴露它将会暴露的内容,因此会丢失信息。
由于propery Style (原生android中的getStyle() )仅在StyleSpan可用,因此无法读取通过GetSpans读取的给定StyleSpan是粗体还是斜体。
我是如何确定粗体或斜体的 ?
这是单声道界面的限制吗?
Native Android Spanned.getSpans(......,SyleSpan.class) function return type StyleSpan[]
Xamarin ISpanned.GetSpans(......) function returns type Java.lang.Object[] though it returns <T> (T=StyleSpan in my case) in native android. Therefore there is a loss of information since the Mono interface doesn't expose what it would have been exposed if I had used the native SDK.
Since propery Style (getStyle() in native android) is only available in StyleSpan there is no way to read that a given StyleSpan read through GetSpans is bold or italic.
Any ideas how I determine bold or italic?
Is this a limitation in the mono interface?
最满意答案
你可以做任何事情。 ;) 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);You can do everything. ;) There is just no comfortable generic wrapper for the GetSpans method.
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 :)"); } }if you want to access it generic:
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);更多推荐
发布评论