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

标签 android xamarin mono xamarin.android

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

Xamarin ISpanned.GetSpans(......)函数返回类型 Java.lang.Object[]虽然它返回 <T> (在 native android 中为 T = StyleSpan)。因此会丢失信息,因为如果我使用 native SDK,Mono 接口(interface)不会公开它会公开的内容。

自属性Style (getStyle() 在 native android 中)仅在 StyleSpan 中可用无法读取通过 G​​etSpans 读取的给定 StyleSpan 是粗体还是斜体。

关于如何确定粗体斜体有什么想法吗?

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

最佳答案

你无所不能。 ;) 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);   

关于android - Xamarin:确定 GetSpans() 中的元素是粗体还是斜体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079662/

相关文章:

android - 带有对话框 fragment 的 tabview android.view.WindowManager$BadTokenException :

c# - 如何在 xamarin 中使用 NotifyDataSetChange?

c# - 找不到方法 : 'MyProject.MvcApplication.RegisterRoutes'

java - 不兼容的类型 - Android,Parse.com

java - 如何以编程方式更改 Android 小部件按钮的样式?

javascript - Android webview "location.replace"不工作

ios - UIActivityViewController - 无法在 ExcludedActivityTypes 中排除 "Save to Files"

ios - 数据库在使用 xamarin ios 的构建之间未保留

linux - 将 WindowsForms 项目从 Visual Studio 迁移到 Linux 上的 MonoDevelop,没有错误。为什么应用程序运行速度很慢?

c# - 从嵌入式资源更改 Gtk.Button 图像