我有一个TextView,它使用XML中的app宽样式集,我想保留在XML定义中。现在,如果我在消息中找到一个特殊字符串,我想在TextView上设置,我想强调它。现在使用UnderlineSpan
类并设置stand和end非常简单。问题是当我在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>
font属性是一个自定义属性,由一个扩展TextView的类提取,用于从XML加载自定义字体。我的布局文件有这个定义:
<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" />
这是我尝试将span应用于文本的代码。为简单起见,我只是在整个字符串上使用UnderLine
span来测试,但这不起作用。我Spannable
工作后,我会将其替换为自定义Spannable
,以便仅对字符串的某些部分进行更改。
Spannable spannable = new SpannableString(modifierGroup.getName());
spannable.setSpan(new UnderlineSpan(), 0, modifierGroup.getName().length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
titleView.setText(spannable);
这对字符串没有任何作用,它只是在应用了Heading3Style
时正常显示,但没有下划线。如果我从XML定义中删除style="@style/Heading3Style
,一切都按预期工作。