我在使用EditText和Spannable文本对象时遇到了困难。这些天来,我已经阅读了大约十次左右的API文档,甚至不确定我是否理解正确。因此,我正在寻找一个示例,以展示如何利用EditText和Spannable。
我在使用EditText和Spannable文本对象时遇到了困难。这些天来,我已经阅读了大约十次左右的API文档,甚至不确定我是否理解正确。因此,我正在寻找一个示例,以展示如何利用EditText和Spannable。
你没有具体说明你从API中无法理解什么,因此很难回答你的问题(简短的答案是:重写你的问题,提出具体问题而不是泛泛而谈的问题)。
一个典型的Spannable示例类似于以下内容,它可以将EditText中选定的文本变为斜体:
Spannable str = mBodyText.getText();
if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart())
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),
mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
else
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),
mBodyText.getSelectionEnd(),
mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
这段内容是从其他地方复制粘贴而来的,因此您可能会遇到直接复制后出现的问题,但至少它展示了一个运行良好的 Spannable
示例(在本例中是一个 StyleSpan
)。在 API 中可以找到其他类型的 Spans(特别是常见问题之一的 ImageSpan
),这对于新转变的安卓开发者来说是很重要的。
SpannableString
的作用非常明显,但是SpannedString
的示例会非常有帮助,因为我完全不清楚它的用途以及如何首先创建它。 - AndreKR我也刚开始试图弄清楚这个问题,似乎过于棘手。
这里是一种可行的方法,用于在现有视图中添加新的可跨度文本。 我想将彩色文字添加到一个视图中,而这似乎是唯一的方法。
虽然感觉像是丑陋的hack,但你可以创建一个虚拟TextView(不会显示在任何地方),并在那里样式化文本,然后将该样式化文本追加到任何你想要的位置。 这个想法来自 anddev.org 的 iifuzz。我的代码如下:
spanbuffer = new TextView(context);
spanbuffer.setText(newText, TextView.BufferType.SPANNABLE);
Spannable s = (Spannable) spanbuffer.getText();
s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0);
this.append(s);
我认为你可以使用SpannableFactory创建新的可跨度文本, 如下所示:
Spannable s = Spannable.Factory.getInstance().newSpannable(newText);
但我无法使得这段文字显示新的span效果,所以我放弃了。