【问题标题】:How to set part of text in textView "bold" (or) "italics" style?如何在 textView“粗体”(或)“斜体”样式中设置部分文本?
【发布时间】:2019-10-30 06:48:02
【问题描述】:

我想用粗体(或)斜体为textView中的几部分文本设置样式。 (通过strings.xml)

【问题讨论】:

  • 这能回答你的问题吗? Set TextView style (bold or italic)
  • 您可以使用Spannable String动态改变文本样式。
  • 如果您希望在运行时执行此操作,您可以使用 SpannableString 执行此操作,请查看此stackoverflow.com/a/58345640/11166067
  • @NPovlsen,没有那个问题专门询问如何通过java而不是通过xml来做到这一点。但我的情况不同,只是让我们知道还有其他简单的方法。
  • @Velu 甚至没有this answer?我也知道是java,不过方法很简单

标签: android textview


【解决方案1】:

您可以使用 SpanableString 以下是一些示例:

https://android--examples.blogspot.com/2016/08/android-spannable-bold-italic-and.html

【讨论】:

    【解决方案2】:

    创建一个 StringUtil 类

    class StringUtil {
    
        lateinit var ss: SpannableString
        fun addForegroundColorSpan(color: Int, start: Int, end: Int): StringUtil {
            ss.setSpan(ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            return ssu
        }
        fun addStyleSpan(style: Int, start: Int, end: Int): StringUtil {
            ss.setSpan(StyleSpan(style), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            return ssu
        }
    
        fun addClickableSpan(cs: ClickableSpan, start: Int, end: Int): StringUtil {
            ss.setSpan(cs, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            return ssu
        }
    
        fun setMovementMethod(textview: TextView): StringUtil {
            textview.setMovementMethod(LinkMovementMethod.getInstance())
            return ssu
        }
    
        fun getClickableSpan(url: String,context: Context): ClickableSpan {
            return object : ClickableSpan() {
                override fun onClick(widget: View) {
                    val uri: Uri = Uri.parse(url)
                    val intent = Intent(Intent.ACTION_VIEW, uri)
                    context.startActivity(intent);
                }
            }
        }
    
        fun setSpannableString(textview: TextView) {
            textview.text = ss
        }
    
        fun getSS(text: String): StringUtil {
            ss = SpannableString(text)
            return ssu
        }
    
        fun setPrefixString(edt: EditText, prefixString: String) {
            edt.setText(prefixString)
            Selection.setSelection(edt.getText(), edt.getText().length);
    
            edt.addTextChangedListener(object : TextWatcher {
    
                override fun afterTextChanged(s: Editable) {
                    if(!s.toString().startsWith(prefixString)){
                        edt.setText(prefixString);
                        Selection.setSelection(edt.getText(), edt.getText().length);
    
                    }
    
                }
    
                override fun beforeTextChanged(
                    s: CharSequence, start: Int,
                    count: Int, after: Int
                ) {
                }
    
                override fun onTextChanged(
                    s: CharSequence, start: Int,
                    before: Int, count: Int
                ) {
    
                }
            })
        }
    
        companion object {
            private var ssu: StringUtil = StringUtil()
            fun getInstance(): StringUtil {
                return ssu
            }
    
        }
    }
    

    像这样使用它

    StringUtil.getInstance().getSS("Here your text. You can set color Span , Style Span, Click Span for the specific part of your string.")
            .addStyleSpan(Typeface.BOLD,34,39)
            .addClickableSpan(StringUtil.getInstance().getClickableSpan("http://www.google.com",this), 34, 39)
            .addForegroundColorSpan(Color.YELLOW, 34, 39)
            .addStyleSpan(Typeface.BOLD,43,text.length-1)
            .addClickableSpan(StringUtil.getInstance().getClickableSpan("http://www.facebook.com",this), 43, text.length-1)
            .addForegroundColorSpan(Color.YELLOW, 43, text.length-1 )
            .setMovementMethod(binding.tvWarringPrivacyPolicy)
            .setSpannableString(binding.tvWarringPrivacyPolicy)
    

    【讨论】:

      【解决方案3】:

      Android textView 支持轻量级 HTML 标记:<b>, <u>, <i>

      <resources>
          <string name="b">This has <b>bold</b> in it.</string>
          <string name="i">Whereas this has <i>italics</i>!</string>
      </resources>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-06
        • 1970-01-01
        • 2023-03-29
        • 2012-09-07
        • 1970-01-01
        • 2011-07-06
        相关资源
        最近更新 更多