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