gpt4 book ai didi

android - 如何将多个字体添加到单个 EditText 意味着每个单词根据运行时间有不同的字体

转载 作者:行者123 更新时间:2023-11-29 02:20:07 52 4
gpt4 key购买 nike

您好,我需要为每个在 edittext 中输入的单词添加多种字体,这意味着每个单词都有不同的字体,我用下面的代码完成了一些工作。

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

但是当您手动分配文本时,这个就可以工作了。我也附上图片 enter image description here

最佳答案

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

覆盖 TextWatcherafterTextChanged 并添加如下自定义逻辑。

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)
}
}
}

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

关于android - 如何将多个字体添加到单个 EditText 意味着每个单词根据运行时间有不同的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56718814/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com