【发布时间】:2020-10-20 07:56:22
【问题描述】:
我想使用 Span 使 textview 的一部分变为粗体,直到特殊字符像逗号一样到达。 例如;
我叫,约翰
你好,你好吗
如果多个逗号到达一个文本视图,那么它应该只使用第一个忽略休息
【问题讨论】:
-
你有特殊字符列表吗?或者条件的字母和数字以外的任何字符?
-
我有一个逗号。
我想使用 Span 使 textview 的一部分变为粗体,直到特殊字符像逗号一样到达。 例如;
我叫,约翰
你好,你好吗
如果多个逗号到达一个文本视图,那么它应该只使用第一个忽略休息
【问题讨论】:
以编程方式如下:
Java
void format(final TextView view) {
final CharSequence text = view.getText();
if (!TextUtils.isEmpty(text)) {
final int index = text.toString().indexOf(',');
if (index > 0) {
final SpannableStringBuilder sb = new SpannableStringBuilder(text);
sb.setSpan(new StyleSpan(Typeface.BOLD), 0, index, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
view.setText(new SpannableString(sb));
}
}
}
科特林
fun format(view: TextView) {
val text = view.text
if (!TextUtils.isEmpty(text)) {
val index = text.indexOf(',')
if (index > 0) {
val sb = SpannableStringBuilder(text)
sb.setSpan(StyleSpan(Typeface.BOLD), 0, index, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
view.text = SpannableString(sb)
}
}
}
另一方面,如果资源字符串设置为永不更改,那么您可以使用 将粗体标签直接设置到您的字符串资源 xml 文件中:: p>
<string name="string_name"><b>Hello</b>, World</string>
【讨论】:
var text:String? = property.name
val spannable = SpannableString(text)
val matcher: Matcher = Pattern.compile(",\\s*(\\w+)").matcher(text)
while (matcher.find()){
val city = matcher.group(1)
val cityIndex: Int = text!!.indexOf(city) - 1
val boldSpan = StyleSpan(Typeface.BOLD)
spannable.setSpan(boldSpan,0,cityIndex,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
holder.mTitleView?.text =spannable
return
}
【讨论】: