Java 在XML中应用样式的TextView上设置自定义范围

Java 在XML中应用样式的TextView上设置自定义范围,java,android,spannablestring,Java,Android,Spannablestring,我有一个TextView,它使用XML中的应用程序范围样式集,我希望将其保留在XML定义中。现在,如果我在要在TextView上设置的消息中找到一个特殊字符串,我会在它下面加下划线。现在,使用UnderlineSpan类并设置支架和末端非常简单。问题是当我在XML中设置了一个样式时,跨度被完全忽略,如果我删除了样式,下划线是正确的。如何在XML中应用样式并允许应用自定义跨距 编辑: styles.xml文件中的我的样式如下: <style name="Heading3Style">

我有一个TextView,它使用XML中的应用程序范围样式集,我希望将其保留在XML定义中。现在,如果我在要在TextView上设置的消息中找到一个特殊字符串,我会在它下面加下划线。现在,使用
UnderlineSpan
类并设置支架和末端非常简单。问题是当我在XML中设置了一个样式时,跨度被完全忽略,如果我删除了样式,下划线是正确的。如何在XML中应用样式并允许应用自定义跨距

编辑:

styles.xml文件中的我的样式如下:

<style name="Heading3Style">
    <item name="android:textAllCaps">true</item>
    <item name="android:textColor">@color/black_red</item>
    <item name="android:textSize">@dimen/text_heading_1</item>
    <item name="font">ROCKWELL_STD_BOLD</item>
</style>

这对字符串没有任何影响,它只是像普通一样显示它,应用了
Heading3Style
,但没有下划线。如果我从XML定义中删除
style=“@style/Heading3Style
,一切都会正常工作。

”问题是,当我在XML中设置了一个样式时,跨度会被完全忽略”“嗯?为了了解您的确切问题,我们确实需要一个例子。@Commonware我用一个例子更新了这个问题,希望能有所帮助。什么是
font
?Android中没有通过样式设置字体的功能。你在使用第三方图书馆吗?如果是这样,那么您的第三方库可能是您的干扰源。它不是第三方,而是我自己的自定义视图,它只有一个自定义名称空间属性,用于从资产目录加载自定义字体。所要做的就是获取枚举值并加载特定的字体,然后在TextView上使用setTypeface进行设置。我建议您回滚到普通
TextView
而不使用样式。确认您的span工作正常。然后添加一个空样式。确认您的span工作正常。将单个属性添加到样式中。确认您的span工作正常。重复此操作,直到所有属性都返回(但您仍在使用普通的
TextView
)。看看你的跨度是否有效。然后在自定义视图中重新添加。用它来确定具体的故障位置。现在,有相当多的活动部件。“问题是,当我在XML中设置了一个样式集时,跨度就被完全忽略了”——嗯?为了了解您的确切问题,我们确实需要一个例子。@Commonware我用一个例子更新了这个问题,希望能有所帮助。什么是
font
?Android中没有通过样式设置字体的功能。你在使用第三方图书馆吗?如果是这样,那么您的第三方库可能是您的干扰源。它不是第三方,而是我自己的自定义视图,它只有一个自定义名称空间属性,用于从资产目录加载自定义字体。所要做的就是获取枚举值并加载特定的字体,然后在TextView上使用setTypeface进行设置。我建议您回滚到普通
TextView
而不使用样式。确认您的span工作正常。然后添加一个空样式。确认您的span工作正常。将单个属性添加到样式中。确认您的span工作正常。重复此操作,直到所有属性都返回(但您仍在使用普通的
TextView
)。看看你的跨度是否有效。然后在自定义视图中重新添加。用它来确定具体的故障位置。现在,你有相当数量的运动部件。
<com.mypackage.views.font.FontTextView
    android:id="@+id/titleView"
    style="@style/Heading3Style"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/standard_margin" />
Spannable spannable = new SpannableString(modifierGroup.getName());
spannable.setSpan(new UnderlineSpan(), 0, modifierGroup.getName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
titleView.setText(spannable);