如何将 Spannable 设置为 TextView?

How to set Spannable to TextView?

我有一个 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 是粗体,我希望它后面的字符串不是粗体。我正在尝试按如下方式使用 spannable ..

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 set span 中为你想要加粗的文本部分。

尝试这样的事情:

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。