【问题标题】:how to have bold and normal text in same textview in android?如何在 android 的同一个文本视图中显示粗体和普通文本?
【发布时间】:2023-04-03 13:36:01
【问题描述】:

我已经搜索了互联网并尝试了以下代码,但它不起作用

SpannableString ss1 = new SpannableString("Health: ");
           ss1.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, ss1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            textview1.setText("\n"+ss1+strhealth+"\n\n");

我希望输出是这样的 健康:良好

其中 strhealth = 好 但它出来了 健康:好 什么错误?

我使用的是安卓工作室 2.1.1

【问题讨论】:

    标签: android spannablestring


    【解决方案1】:
     String txt1="Health: ";
     SpannableString txtSpannable= new SpannableString(txt1);
     StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
     txtSpannable.setSpan(boldSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    
     builder.append(txtSpannable);
    
     String txt2="good";
     builder.append(txt2);
    
     textview1.lblStatus.setText(builder, TextView.BufferType.SPANNABLE);
    

    【讨论】:

    • 最好不要硬编码8的长度,而是使用txt1.length()。
    【解决方案2】:

    最简单的方法是

    textview1.setText(Html.fromHtml("<b>Health:</b> good"));
    

    您的代码中的错误是在此处使用字符串连接:"\n"+ss1+strhealth+"\n\n",它会去除所有格式,因为组件被视为普通字符串。

    【讨论】:

    • 在这里工作,你到底尝试了什么?
    • 如果我不连接,那么如何将变量和多个文本放在单个文本视图中
    • 我试过 textview1.setText(Html.fromHtml("Health:")+strhealth+"\n\n");但输出仍然没有 Health: as bold
    • 与您最初尝试的问题相同。使用这个:textview1.setText(Html.fromHtml("&lt;b&gt;Health:&lt;/b&gt;"+strhealth+"\n\n"));
    • 感谢它的工作,但现在我必须使用 html 来格式化文本视图中的所有内容。现在文本视图的属性,例如中心不工作
    【解决方案3】:

    在 kotlin 中,您可以做到这一点。我用它来加粗字符串中的字符/单词。例如:

    item = "菲律宾"

    查询 = “菲尔”

    结果 = 菲尔ippines

    val spannable = SpannableString(item)
    val indexStart = item.indexOf(query)
    val indexEnd = indexStart + query.length
    spannable.setSpan(StyleSpan(Typeface.BOLD), indexStart, indexEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    

    并像这样使用它

    textView.text = spannable
    

    【讨论】:

      【解决方案4】:

      我回答的有点晚了,但是我通过使用这里已经提供的答案创建了一种易于使用的方法。

          private void setSpanString(String string1, String string2, TextView textView) {
          SpannableStringBuilder builder=new SpannableStringBuilder();
          SpannableString txtSpannable= new SpannableString(string1);
          StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
          txtSpannable.setSpan(boldSpan, 0, string1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
          builder.append(txtSpannable);
          builder.append(string2);
         textView.setText(builder, TextView.BufferType.SPANNABLE);
      }
      

      【讨论】:

        【解决方案5】:

        我会使用这样的字符串资源:

        <string name="health_status"><b>Health:</b> %1$s</string>
        

        当您想设置健康状态时,只需使用此代码:

        String ss1 = getString(R.string.health_status, strhealth);
        

        【讨论】:

          【解决方案6】:

          下面我已经提到了你可以在 Kotlin 中创建 spannableString 的代码

          val spannableStringBuilder = SpannableStringBuilder()
          
          val boldSpan: StyleSpan = StyleSpan(Typeface.BOLD)
          
          sp_text.setSpan(boldSpan, firstIndex, lastIndex,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
          
          sp_text.setSpan(clickableSpan, firstIndex, lastIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
                      sp_text.setSpan(ForegroundColorSpan(ContextCompat.getColor(mContext, R.color.colorPrimary)), firstIndex, lastIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
          

          【讨论】:

            【解决方案7】:

            我认为您应该使用 2 个不同的 textView、一个标签和一个用于数据。这是常见且良好的做法

            【讨论】:

            • 有时您必须处理一个字符串,因此需要更多工作才能将字符串拆分为适当的 textView。那么为什么不尽可能用一块石头击中 2 只鸟呢。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多