SpannableString在Dialog中不起作用

时间:2017-12-04 11:15:07

标签: android textview spannablestring

我希望在spanString中以正常样式显示粗体样式中的TextView和其余字符串。但整个TextView仅以正常风格显示。请帮帮我。

if ((mStoreListValue.get(pos).getStoreStatus().equals("CLOSED"))){

   final Dialog dialog = new Dialog(v.getRootView().getContext(), android.R.style.Theme_Translucent_NoTitleBar);
   dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
   dialog.getWindow().setContentView(R.layout.resclosed_dialog);
   ImageView btn_close =  dialog.findViewById(R.id.close_btn);
   TextView txt_close =  dialog.findViewById(R.id.tv_closed);

   SpannableString spanString = new SpannableString(sname);
   spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

   txt_close.setText(spanString +  " " + mContext.getResources().getString(R.string.closed));

   btn_close.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
              dialog.dismiss();
         }
    });
  dialog.show();

3 个答案:

答案 0 :(得分:1)

这是因为您只是将SpannableStringString结合在一起,结果为toString()(具有对象哈希码的普通字符串)。使用包含多个String的单个Span
请参阅以下示例。

    String s1="My app";
    String s2= "Close";
    SpannableString spanString = new SpannableString(s1+s2);
    spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, s1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spanString.setSpan(new StyleSpan(Typeface.NORMAL), s1.length(), (s1+s2).length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(spanString);

答案 1 :(得分:0)

使用此

SpannableStringBuilder builder = new SpannableStringBuilder();
SpannableString spanString = new SpannableString(sname);
spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
builder.append(spanString);
builder.append(mContext.getResources().getString(R.string.closed));
txt_close.setText(builder);

而不是这个

txt_close.setText(spanString +  " " + mContext.getResources().getString(R.string.closed));

答案 2 :(得分:0)

使用字符串模板,您可以拥有字符串资源: <b>表示粗体, %1$d表示我期待一个数字/数字 所以我在textview

中得到( 5分
//xml
<string name="confirm_eta_text"> &lt;b>%1$d min &lt;/b> away</string>

// Java   
mEta.setText(
Compat.fromHtml(String.format(getResources().getString(R.string.confirm_eta_text), 5)));

Android String Formatting