Это немного сложно сделать в EditText
, так как это редактируемый.Один из подходов, который вы можете предпринять, - добавить TextWatcher
или onTextChangedListener
к вашему EditText
.
Переопределить afterTextChanged
из TextWatcher
и добавить пользовательскую логику, например, следующую.
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)
}
}
}
Это не оптимизировано, но должно помочь вам получитьначал.