Android 如何在textView中设置部分文本;黑体字;(或)";斜体字“;风格

Android 如何在textView中设置部分文本;黑体字;(或)";斜体字“;风格,android,textview,Android,Textview,我想在textView中用粗体(或)斜体字对文本的几个部分进行样式设置。(通过strings.xml)Android textView支持轻量级HTML标记:, 这件事很大胆。 然而这有斜体字! 您可以使用SpanableString以下是一些示例: 创建一个类StringUtil class StringUtil { lateinit var ss: SpannableString fun addForegroundColorSpan(color: Int, start:

我想在
textView
中用粗体(或)斜体字对文本的几个部分进行样式设置。(通过strings.xml)

Android textView支持轻量级HTML标记:


这件事很大胆。
然而这有斜体字!

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


创建一个类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)

这回答了你的问题吗?您可以使用Spannable String动态更改文本样式。如果您希望在运行时使用SpannableString进行更改,请看一下这个@NPovlsen,不,这个问题专门询问如何通过java而不是xml进行更改。但我的情况不同,只是让大家知道还有另一种简单的方法。@Velu甚至不?我知道它也是java,但这是一种简单的方法
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)