java - 如何将 Spannable 设置为 TextView?

标签 java android spannablestring spannable

我有一个 TextView 声明如下..

<TextView
    android:id="@+id/cc_journal_survey_next_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:text="Next Survey: %s"/>

如您所见,Next Survey 是粗体,我希望其后面的字符串不是粗体。我正在尝试按如下方式使用跨度..

mNextTv = findViewById(R.id.cc_journal_survey_next_tv);

final SpannableString surveyName = new SpannableString(survey.getSurveyName());
        surveyName.setSpan(new StyleSpan(Typeface.NORMAL),0, surveyName.length(), Spannable
                .SPAN_EXCLUSIVE_EXCLUSIVE);
        mNextTv.setText(String.format(getContext().getString(R.string.cc_journal_survey_next), surveyName));

但是我的最终结果是

下一个调查:调查

我认为 Typeface.NORMAL 会采用我的可扩展字符串并以不加粗的方式显示它。

我对此有什么不明白的地方?

最佳答案

您的 TextView 的 textStyle 属性设置为粗体。它会覆盖您在“surveyName”变量中设置的内容。所以我的建议是删除它,并在你的 Spannable 中设置你想要加粗的文本部分的范围。

尝试这样的事情:

final theWholeString = String.format(getContext().getString(R.string.cc_journal_survey_next), surveyName);
final SpannableString outputString = new SpannableString(theWholeString);
outputString.setSpan(new StyleSpan(Typeface.BOLD), 0, END_OF_BOLD_AREA, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

mNextTv.setText(outputString);

并从 TextView 中删除 testStyle。

关于java - 如何将 Spannable 设置为 TextView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323019/

相关文章:

java - android:tableview中的xml解析输出

Java私有(private) Assets 放在哪里?

java - Android: setOnBufferingUpdateListener 未定义 VideoView 类型

java - 转换为unixtime : same input,不同的输出

java - LayoutInflater.inflate() 返回的 View 也总是 ViewGroup 吗?

android - SpannableStringBuilder 不保留文本中设置的样式

android - 如何在 Android 中突出显示 TextView

android - 自定义 Toast 消息文本颜色

java - 将查询转换为 java jdbc 模板中的参数化准备语句

java - 将 Android App 与现有的 Spring 项目集成