如何将Spannable设置为TextView?

时间:2018-03-16 14:23:01

标签: 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"/>

正如您所看到的,下一次调查是粗体,我希望其后面的字符串不是粗体。我试图使用如下的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会使用我的spannable字符串并且不加粗体显示它。

我对此不了解什么?

1 个答案:

答案 0 :(得分:3)

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。