您的位置:首页 > 其它

给TextView加上多彩效果:改变部分字体的大小和颜色

2016-03-02 14:55 741 查看


给TextView加上多彩效果:改变部分字体的大小和颜色

标签: textview字体colorSpannable
2014-01-16 18:30 10247人阅读 评论(15) 收藏 举报


分类:

Android疑难解答(3)


版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

转载请注明出处:/article/1603778.html

前言

在实际使用中,有时候会遇到特殊需求,比如pm突发奇想,想把TextView的某几个字变的大一点,再加点颜色,这貌似不好搞,如果是给TextView整体加效果就很好搞了。但是问题总是要解决,下面我给出解决方法,其实方法很简单,问题在于你是否知道有这种方法。

方法:

1、 字体颜色可以采用font,也可以使用ColorSpan

2、 字体大小可以使用<big>、<small>和 <h1>到<h6>的标签,还可以采用SizeSpan

3、 Spannable功能比较全面,调用setSpan即可为TextView设置美丽的特效,其支持的特效在CharacterStyle中定义,有好多种,比如AbsoluteSizeSpan、ForegroundColorSpan以及BackgroundColorSpan等,具体大家可以根据需要查看,下面是CharacterStyle的类继承关系图:

public abstract class


CharacterStyle

extends Object

java.lang.Object
android.text.style.CharacterStyle


Known
Direct Subclasses

BackgroundColorSpan, ClickableSpan, ForegroundColorSpan, MaskFilterSpan, MetricAffectingSpan, RasterizerSpan, StrikethroughSpan, SuggestionSpan,UnderlineSpan



Known
Indirect Subclasses

AbsoluteSizeSpan, DynamicDrawableSpan, ImageSpan, LocaleSpan, RelativeSizeSpan, ReplacementSpan, ScaleXSpan, StyleSpan, SubscriptSpan, SuperscriptSpan,TextAppearanceSpan, TypefaceSpan, URLSpan

效果图



上面效果的代码

[java] view
plain copy







TextView textView1 = (TextView) findViewById(R.id.textView1);

TextView textView2 = (TextView) findViewById(R.id.textView2);

TextView textView3 = (TextView) findViewById(R.id.textView3);

TextView textView4 = (TextView) findViewById(R.id.textView4);

//两次加大字体,设置字体为红色(big会加大字号,font可以定义颜色)

textView1.setText(Html.fromHtml("北京市发布霾黄色预警,<font color='#ff0000'><big><big>外出携带好</big></big></font>口罩"));

//设置字体大小为3级标题,设置字体为红色

textView2.setText(Html.fromHtml("北京市发布霾黄色预警,<h3><font color='#ff0000'>外出携带好</font></h3>口罩"));

//设置字体大小为58(单位为物理像素),设置字体为红色,字体背景为黄色

textView3.setText("北京市发布霾黄色预警,外出携带好口罩");

Spannable span = new SpannableString(textView3.getText());

span.setSpan(new AbsoluteSizeSpan(58), 11, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

span.setSpan(new ForegroundColorSpan(Color.RED), 11, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

span.setSpan(new BackgroundColorSpan(Color.YELLOW), 11, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

textView3.setText(span);

//两次缩小字体,设置字体为红色(small可以减小字号)

textView4.setText(Html.fromHtml("北京市发布霾黄色预警,<font color='#ff0000'><small><small>外出携带好</small></small></font>口罩"));

说明:上述代码分别用不同方式实现了类似的效果,通过对比,我们应该可以理解各种方法的不同,想写出更多效果Spannable是必须的,因为font支持的属性很有限,比如说font不支持size属性,所以请多多了解Spannable。也许有时候我们想把文本加到xml里面,这也是可以的,只不过有一点我们需要注意,那就是要对<、>、'、"这四个字符进行转换,因为它们四个是HTML的标签。具体来说,左括号<要用<代替,右括号>要用>代替,单引号和双引号要用\进行转义。这里给出一个示例,其效果和上面代码中的效果是一致的:<string
name="text">北京市发布霾黄色预警,<font color=\'#ff0000\'><big><big>外出携带好</big></big></font>口罩</string>,另外,你必须显式地调用textView.setText(Html.fromHtml(getString(R.string.text)))来使其生效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: