Я хочу реализовать эффект, который управляет входными символами в тексте редактирования, независимо от того, используется ли диапазон.
Например, в EditText можно использовать
getEditableText().setSpan(new StyleSpan(Typeface.NORMAL), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
сделайте выбранные символы ЖИРНЫМИ. Есть решения, которые, когда пользователь включает настройку полужирного шрифта, каждый введенный символ с тех пор будет выделен жирным шрифтом, и как только пользователь отключит настройку полужирного шрифта, символы, введенные после этого, не будут выделены жирным шрифтом.
Я попытался использовать Spanned.SPAN_EXCLUSIVE_INCLUSIVE в качестве флагов в SpannableStringBuilder.setSpan(), но я просто могу контролировать, когда начинается эффект 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.
Надеюсь, кто-то может дать мне несколько предложений. Заранее спасибо.