我正在努力使用 EditText 和 Spannable 文本对象,这些天来,我已经阅读了大约十次 API 文档,即使我不确定我是否理解正确。因此,我正在寻找一种示例来向我展示如何使用 EditText 和 Spannable。
问问题
44236 次
2 回答
32
由于您没有指定从 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);
这是从其他东西剪切和粘贴的,因此您的直接可粘贴性可能会受到影响,但它至少显示了 a 的工作示例Spannable
(在本例中为 a StyleSpan
)。在 API 中,您可以找到其他类型的 Span(特别是ImageSpan
,这是新转换的 droiders 中的常见问题)。
于 2010-02-01T18:24:38.637 回答
10
我也刚刚开始尝试弄清楚,这似乎不必要地棘手。
这是一种将新的可跨文本添加到现有视图的工作方法。我想将彩色文本添加到视图中,这似乎是唯一的方法。
虽然感觉像一个丑陋的 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);
但我无法让这个文本真正显示新的跨度效果,所以我放弃了。
于 2010-10-02T17:14:11.977 回答