android - 如何在一个TextView中实现多种文本风格?

 无棱9931 发布于 2022-11-08 08:34

可以为TextView中不同部分的文本设置多种风格(style)吗?
例如,我按照下述方式设置文本:

tv.setText(line1 + "\n" + line2 + "\n" + word1 + "\t" + word2 + "\t" + word3);

每个文本元素都能匹配不同的风格效果吗?例如,第一行,加粗,第一个字,斜体等等。在开发者指南Common Tasks and How to Do Them in Android中包括Selecting, Highlighting, or Styling Portions of Text的方法:

// Get our EditText object.
EditText vw = (EditText)findViewById(R.id.text);

// Set the EditText's text.
vw.setText("Italic, highlighted, bold.");

// If this were just a TextView, we could do:
// vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);
// to force it to use Spannable storage so styles can be attached.
// Or we could specify that in the XML.

// Get the EditText's internal text storage
Spannable str = vw.getText();

// Create our span sections, and assign a format to each.
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);

但这种方法在文本中的使用次数受限,所以,有什么方法可以达到我想要的效果吗?

原问题:Is it possible to have multiple styles inside a TextView?

1 个回答
  • 答:Legend
    (最佳答案)
    遇到这种情况,我的解决办法是编写如下代码:

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

    答:CommonsWare
    可以试着用Html.fromHtml(),为文本添加粗体和斜体的HTML标签(例如Html.fromHtml("This mixes bold and italic stuff);)。


    答:Kent Andersen
    如果你习惯上用html,可以创建一个.xml风格:

    Textview tv = (TextView)findViewById(R.id.textview);
    SpannableString text = new SpannableString(myString);
    
    text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle),0,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle),6,10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    
    tv.setText(text, TextView.BufferType.SPANNABLE);
    
    2022-11-12 01:44 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有