如何将多种字体添加到单个编辑文本意味着每个单词根据运行时具有不同的字体



嗨,我需要为每个单词添加多种字体,输入编辑文本,意思是每个单词都有不同的字体,我用下面的代码做了一些工作。

SpannableStringBuilder SS = new 
SpannableStringBuilder(enterword.getText().toString());
SS.setSpan (new CustomTypefaceSpan("", font2), 0, size , 
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
enterword.setText(SS);

但是当您手动分配文本时,这个正在工作。我也附上图像在此处输入图像描述

EditText中执行此操作有点棘手,因为它是可编辑的。您可以采取的一种方法是 - 为您的EditText添加TextWatcheronTextChangedListener

覆盖TextWatcher afterTextChanged并添加自定义逻辑,如下所示。

String[] words = text.split();
SpannableStringBuilder sb = new SpannableStringBuilder();
for (String word in words) {
    SpannableString spanned = new SpannableString(word);
    spanned.setSpan( -- your font span here --);
    sb.append(spanned);
    sb.append(" ");
}
editText.setText(sb);

您必须在何时以及如何转换它时添加自己的逻辑。当您调用editText.setText 时,afterTextChanged将被触发。您需要使用一些标志和回调handler来处理递归。

你可以有这样的东西。

class FontWatcher(private val editText: EditText) : TextWatcher {
    private val handler = Handler()
    private var locked = false
    private val updateCallback = Runnable {
        locked = true
        // Create your spannable as mentioned above
        editText.setText(sb, TextView.BufferType.EDITABLE)
        editText.setSelection(sb.length)
        locked = false
    }
    override fun afterTextChanged(s: Editable) {
        if (!locked) {
            handler.removeCallbacks(updateCallback)
            handler.postDelayed(updateCallback, 300)
        }
    }
}

这未优化,但应该可以帮助您入门。

最新更新