在TextView中是否可以使用多个样式?

9 浏览
0 Comments

在TextView中是否可以使用多个样式?

在TextView中设置不同文本段落的多个样式是否可行?\n例如,我将文本设置如下:\ntv.setText(line1 + \"\\n\" + line2 + \"\\n\" + word1 + \"\\t\" + word2 + \"\\t\" + word3);\n每个文本元素是否可以有不同的样式?例如,line1加粗,word1斜体等。\n开发者指南的Android常见任务及其实现方法包括选择、高亮或设置文本样式:\n

\n

// 获取我们的EditText对象。
EditText vw = (EditText)findViewById(R.id.text);
// 设置EditText的文本。
vw.setText("Italic, highlighted, bold.");
// 如果这只是一个TextView,我们可以这样做:
// vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);
// 强制它使用Spannable存储以便附加样式。
// 或者我们可以在XML中指定。
// 获取EditText的内部文本存储
Spannable str = vw.getText();
// 创建我们的Span部分,并为每个部分分配一个格式。
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

\n

\n但是这使用了文本内部的显式位置编号。有没有更简洁的方法来实现这一点?

0
0 Comments

在上述内容中,作者提到了如何在TextView中使用多种样式的问题。作者首先介绍了如何从string.xml资源中读取Html文本,并且使用CDATA标记使其易于本地化。然后作者给出了一个示例代码,使用Html.fromHtml()方法将Html文本设置到TextView中。作者表示自己对这种方法能够成功运行感到意外,希望对其他人有用。

接下来,有人问到这个方法是否也适用于布局XML文件中。当他在布局XML文件中引用字符串资源时,只能获取包含所有HTML标签的字符串。另一位用户发现了一个更好的解决方案,并在回答中提供了一个链接,该链接可以在布局文件中直接指定文本,而不需要在代码中进行设置。

根据以上内容,可以得出这个问题出现的原因是想要在TextView中使用多种样式,并且从string.xml资源中读取Html文本的需求。解决方法是使用Html.fromHtml()方法将Html文本设置到TextView中,或者使用提供的链接中的解决方案在布局文件中直接指定文本。

0
0 Comments

在使用TextView中同时使用多种样式是否可能?

可以尝试使用Html.fromHtml()方法,并使用粗体和斜体的HTML标签标记文本,例如:

Spanned text = Html.fromHtml("This mixes <b>bold</b> and <i>italic</i> stuff");
textView.setText(text);

如果我想要为不同的文本使用不同的字体大小,我假设将其放在HTML标记中是不正确的,因为字体标签已经过时了。有没有其他的方法可以实现这个?

实际上,这引发了另一个问题:是将HTML文本放在一个TextView中,还是使用不同的标记设置三个TextView?我假设显然是第一个,但只是想确认一下。

我不知道Html.fromHtml()支持的标记有哪些 - 你需要查看源代码。内联标记和多个TextView小部件应该是正交的决策。如果您需要精确放置离散文本片段,请使用多个小部件。如果您需要在小部件中内联标记,那么请使用内联标记。请记住:Android中没有FlowLayout,因此串联多个TextView来创建段落在我所知道的范围内并不真正实用。

谢谢你的回答...实际上,标签起作用了...所以我会简单地使用它...

那么对于长文本应该怎么办?有没有适用于Android的HTML编辑器工具?因为如果我使用普通的HTML编辑器来整理长文本,生成的源代码会改变样式(加粗、斜体等),但不会改变颜色。

您可以手动将ForegroundColorSpan应用于Spannable对象。

我尝试过这个,但是除了<> </>之外,它将所有内容都读取为字符串(即显示为:This mixes bold and italic stuff)...我该怎么办?

这个方法不起作用:Spanned monthText = Html.fromHtml("<b>" + month.getMonthLabel().toUpperCase() + "</b>"); monthYearLabel.setText(monthText + " " + month.getYearLabel()); 有人能告诉我我做错了什么吗?

您正在通过monthText + " " + month.getYearLabel()丢弃您的样式。请参考StringUtils.concat()

谢谢CommonsWare。您是指Apache Commons Lang 2.6中的StringUtils吗?

不,抱歉,那是个打字错误。我是指TextUtils.concat()

太棒了。谢谢CommonsWare。这对我有用。您认为呢? - Spanned monthText = Html.fromHtml("<b>"+month.getMonthLabel().toUpperCase()+"</b>"); Spanned yearText = Html.fromHtml("&nbsp;"+month.getYearLabel()); monthYearLabel.setText(TextUtils.concat(monthText, yearText));

如果您不需要单独的片段,您可以将其合并到一起:monthYearLabel.setText(Html.fromHtml("<b>"+month.getMonthLabel().toUpperCase()+"</b>&nbsp;"+month.getYearLabel()))

0
0 Comments

在TextView中使用多种样式是可能的吗?

在上述内容中,提到了一种实现方法,即使用Html.fromHtml()方法将不同的样式插入到TextView中。具体代码如下:

mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" +  "<br />" + 
            "<small>" + description + "</small>" + "<br />" + 
            "<small>" + DateAdded + "</small>"));

另外,还提供了一个非官方列表,列出了该方法支持的标签,可以参考以下链接:

- http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html

也可以参考以下问题:

- https://stackoverflow.com/questions/9754076

另外,还有一位网友提供了另外一种方法,即通过一个名为formatTextWhite的方法来插入文本,并指定字体大小、颜色和字体样式。

其中,还提到了使用Html.fromHtml()方法时可能遇到的问题,如插入颜色时无法生效的情况。提供了一种解决方法,即使用转义字符来表示颜色,例如:

Html.fromHtml("<font color=\"#999999\">");

还有一位网友提到了使用append()函数来插入不需要使用HTML的文本的方法。

此外,还有一些其他问题和讨论,涉及到使用Html.fromHtml()方法创建Spannable对象、使用ClickableSpan时需要设置LinkMovementMethod等。

最后,还提到了一位网友提醒说,当使用长字符串时,Html.fromHtml()方法可能不太好用。

从以上内容中可以得出结论:在TextView中使用多种样式是可能的,可以使用Html.fromHtml()方法来实现。同时,还提供了一些解决方法和注意事项。

0