我想用{strong>粗体(或)斜体为textView
中的文本打几部分。 (通过strings.xml)
答案 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>