Java 在Android中使用Spanable进行全文编辑

Java 在Android中使用Spanable进行全文编辑,java,android,xml,android-edittext,spannable,Java,Android,Xml,Android Edittext,Spannable,我有一个EditText视图,用于让用户输入文本。在某些字符之后,我想减小EditText中文本的字体大小。我正在使用TextWatcher的onTextChanged侦听器跟踪用户输入和字符长度。这部分工作正常。但要设置文本的字体大小,我使用以下方法: final Spannable span = new SpannableString(editText.getText()); span.setSpan(new RelativeSizeSpan(0.9f), 0, string.length)

我有一个EditText视图,用于让用户输入文本。在某些字符之后,我想减小EditText中文本的字体大小。我正在使用
TextWatcher的
onTextChanged
侦听器跟踪用户输入和字符长度。这部分工作正常。但要设置文本的字体大小,我使用以下方法:

final Spannable span = new SpannableString(editText.getText());
span.setSpan(new RelativeSizeSpan(0.9f), 0, string.length), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
editText.setText(span);
现在,我面临两个问题:

  • 当前文本大小会根据需要进行更改,但如果用户在当前文本前面输入新文本,则新文本的大小与所需的更新文本字体大小不同,而是与原始EditText文本字体大小相同
  • 例如,如果当前文本为“ABC”,则此文本的字体大小为 如果用户在“ABC”前面输入“123”,如“123ABC”,则更新 123的大小与更新的文本大小不同,但与原始字体大小相同,但 “ABC”继续保持更新后的所需字体大小

  • 编辑文本的光标始终移动到起始位置。我希望光标位置与更新文本大小之前的位置相同
  • 任何帮助都将不胜感激


    谢谢。

    检查此项,易于实施,可以解决我们面临的许多与SpannableString相关的问题。

    非常好的解决方案。按预期工作。谢谢您能为光标问题提出建议吗?此外,如果输入了空白,则在输入任何新文本时,大小与原始大小不符,并且与原始大小相同。您能就如何解决此问题提出建议吗?