嗨,我需要为每个单词添加多种字体,输入编辑文本,意思是每个单词都有不同的字体,我用下面的代码做了一些工作。
SpannableStringBuilder SS = new
SpannableStringBuilder(enterword.getText().toString());
SS.setSpan (new CustomTypefaceSpan("", font2), 0, size ,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
enterword.setText(SS);
但是当您手动分配文本时,这个正在工作。我也附上图像在此处输入图像描述
在EditText
中执行此操作有点棘手,因为它是可编辑的。您可以采取的一种方法是 - 为您的EditText
添加TextWatcher
或onTextChangedListener
。
覆盖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)
}
}
}
这未优化,但应该可以帮助您入门。