【发布时间】:2016-05-10 03:33:22
【问题描述】:
我想实现一个效果,控制edittext中的输入字符是否使用span。
例如在EditText中可以使用
getEditableText().setSpan(new StyleSpan(Typeface.NORMAL), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
使选中的字符为BOLD。是否有解决方案,当用户启用粗体设置时,此后输入的每个字符都会加粗,一旦用户禁用粗体设置,之后输入的字符将不会粗体。
我尝试在 SpannableStringBuilder.setSpan() 中使用 Spanned.SPAN_EXCLUSIVE_INCLUSIVE 作为标志,但我只能控制 span 的效果何时开始,并且无法控制结束。
还尝试使用 TextWatcher 监听每个字符输入,并将 Span 设置为每个字符。
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter)
{
setTextSpan(start, lengthBefore, lengthAfter);
}
private void setTextSpan(int start, int lengthBefore, int lengthAfter)
{
if (isBold) {
getEditableText().setSpan(new StyleSpan(Typeface.BOLD), start, start + lengthAfter, Spanned
.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
但是当使用Html.toHtml()时,每个字符都被<b></b>包裹。
点赞<p dir="ltr"><b>1</b><b>1</b><b>1</b><b>1</b><b>1</b><b>1</b></p>
我在SpannableStringBuilder.java中阅读了一些源代码,但没有找到任何改变span的效果范围的方法。
希望有人能给我一些建议。提前致谢。
【问题讨论】:
-
你用的TextWatcher怎么样,有什么问题?
-
@Huo Chhunleng 很抱歉这么晚才回复。问题是,当我使用 TextWatcher 并输入一些字符时,显示是正确的,但是通过 Html.toHtml() 转换后,结果不是我想要的b>cde',但我想要的结果是 '
abcde
' -
@Huo Chhunleng 这样就可以将选中的文字设置为粗体。我想要的效果是启用加粗后输入的所有字符都是粗体,禁用加粗后输入正常。跨度>
-
很抱歉打断你,问题解决了吗?或者寻找其他方式来实现?如果是这样,非常感谢您的回复。
标签: android html spannablestring richedit spannable