如何在textView中以“粗体”(或)“斜体”样式设置文本的一部分?

时间:2019-10-30 06:48:02

标签: android textview

我想用{strong>粗体(或)斜体textView中的文本打几部分。 (通过strings.xml)

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

  

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

答案 2 :(得分:0)

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>
相关问题