如何在 Android Material TextInputLayout 中将 SpannableString 设置为 EditText?

How to set a SpannableString to an EditText in an Android Material TextInputLayout?

我找不到将 Material TextInputLayout 中的 EditText 的文本设置为 SpannableString 并使样式实际显示在屏幕。我已经尝试了 TextInputLayoutEditText 的所有组合,例如:

  1. AppCompatEditText
  2. EditText
  3. TextInputEditText

用各种方法创建 SpannableString,例如:

  1. HtmlCompat.fromHtml(string, HtmlCompat.FROM_HTML_MODE_COMPACT)
  2. SpannableString(string).setSpan(...)
  3. TextUtils.stringOrSpannedString(string)

用各种方法设置EditText的文本,例如:

  1. edittext.setText(spannedString)
  2. edittext.setText(spannedString, TextView.BufferType.SPANNABLE)
  3. edittext.append(spannedString)

疯狂的是,当 EditText 不在 Material TextInputLayout 内时,它们都可以工作,所以这一定是个问题。更多信息:当您在 TextInputLayout 上设置提示或占位符文本时,SpannableString 会受到尊重,而不是其中 EditText 的文本。我查看了 TextInputLayout 源代码,但没有发现任何错误。感谢任何能提供帮助的人。

在我准备放弃的时候想出来了。您可以从 EditText 获取 Editable 对象,然后将 Span 应用于它。方法如下:

mEditText.text.setSpan(...)

当您知道要查找的位置时,会出乎意料地容易。