2016-06-28 42 views
1

Android本地Spanned.getSpans(......,SyleSpan.class)函数返回类型StyleSpan[]Xamarin:确定GetSpans()中的元素是粗体还是斜体?

XamarinISpanned.GetSpans(......)函数返回一个类型Java.lang.Object[]但它(在我的情况T = StyleSpan)在原生Android返回<T>。因此,如果我使用原生SDK,Mono界面不会公开它会暴露的内容,从而导致信息丢失。

由于(在原生Android getStyle())属性格式Style仅在StyleSpan可没有办法阅读给定StyleSpan通过GetSpans读取粗体或斜体。

任何想法如何确定加粗斜体

这是单声道接口的限制吗?

回答

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); 
+0

完美的工作表示感谢。 – SadeepDarshana

+0

完美谢谢。 我实际上试图施放这个(它应该工作),但是将每个Java.Lang.Object转换为StyleSpan,我已经将数组Object []转换为StyleSpan [],这显然不起作用。 所以当铸造失败时,我认为他们基本上是Lang.Objects而不是StyleSpans。 只有在阅读完这个答案后才意识到错误。 – SadeepDarshana

相关问题