安卓上的Spannable用于TextView的实现

39
Tweet o = tweets.get(position);

TextView tt = (TextView) v.findViewById(R.id.toptext);
//TextView bt = (TextView) v.findViewById(R.id.bottomtext);         

EditText bt =(EditText)findViewById(R.id.bottomtext);
bt.setText(o.author);
Spannable spn = (Spannable) bt.getText();
spn.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC)
, 0, 100, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  

//bt.setText(o.author);    
tt.setText(o.content);

我正在我的Android应用中设置Twitter数据。我想使用Spannable使字体变粗和斜体,但它不起作用,会出现错误。我该怎么做?


它突然停止工作并显示错误。通常代码是正常的,但我想将字体加粗,结果出现了这个错误。 - baran
请在异常信息中发布LogCat输出。很可能您正在尝试将跨度应用于文本末尾以外的位置-请使用实际长度而非100。 - Asahi
这个方法可能会有帮助。https://dev59.com/DWYq5IYBdhLWcg3wkRi_#44255840 - Zar E Ahmer
3个回答

78

我想用 Spannable 让字体变成粗体和斜体

为此,您需要将o.content文本设置为SpannableString,然后将其设置为 TextView:

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

编辑 : 你也可以使用 Html.fromHtml 在文本视图中使文本加粗和斜体,例如:

tt.setText(Html.fromHtml("<strong><em>"+o.content+"</em></strong>"));

spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 0, spannablecontent.length(), 0); - baran
2
@baran:你也可以使用Html.fromHtml来使文本加粗和斜体。 - ρяσѕρєя K
我该如何在这里添加图片?有没有一种方式可以像将文本加粗一样添加图片? - Aada
@Aada:只需使用ImageSpan,在Google上搜索ImageSpan,您将获得许多结果。 - ρяσѕρєя K
如何使用自定义字体? - slott
@slott 这是完全不同的问题。你可以在谷歌上搜索,会有很多类似问题的答案。 - Darpan

2
使用方法 Html.fromHtml() 是创建一个 spannable 文本并设置为你的 TextView 加粗和斜体的简单方法:
同时使用 html 元素 <b><i>
myTextView.setText(Html.fromHtml("<b><i>my text bold and italic!</i></b>"));

或者HTML元素<strong><em>
   myTextView.setText(Html.fromHtml("<strong><em>my text bold and italic!</em></strong>"));

1
SpannableString hint = new SpannableString(o.content.toString());

字体大小
hint.setSpan(new RelativeSizeSpan(0.9f), 0, hint.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);

字体族

hint.setSpan(new TypefaceSpan("sans-serif"), 0, hint.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);

斜体
hint.setSpan(new StyleSpan(Typeface.ITALIC), 0, s.length(), 0);

颜色
hint.setSpan(new ForegroundColorSpan(Color.GRAY), 0, hint.length(), 0);

粗体

hint.setSpan(new StyleSpan(Typeface.BOLD), 0, hint.length(), 0);

参考链接: https://www.programcreek.com/java-api-examples/index.php?api=android.text.style.RelativeSizeSpan

(该链接提供了与Android文本样式相关的Java API示例。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接