通常情况下,textview 设置文本的样式很单一,为了满足某种需求可以使用SpannableString来设置文本字体大小、颜色、超链接等属性。

xml就一个TextView所以就不在给出了,直接看代码。

 package com.dj.test;

 import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.ScrollingMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView; public class MainActivity extends Activity {
private TextView tv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
String str = "每个人都有一个死角, \n 自己走不出来,别人也闯不进去。\n我把最深沉的秘密放在那里。\n你不懂我,我不怪你。www.baidu.com " +
"\n每个人都有一道伤口,\n或深或浅,盖上布,以为不存在。\n我把最殷红的鲜血涂在那里。\n你不懂我,我不怪你。" +
"\n每个人都有一段告白,\n忐忑、不安,却饱含真心和勇气。\n我把最抒情的语言用在那里,\n你不懂我,我不怪你。" +
"\n每个人都有一场爱恋,\n用心、用情、用力,感动也感伤。\n我把最炙热的心情藏在那里,\n你不懂我,我不怪你。" +
"\n每个人都有一行眼泪,\n喝下的冰冷的水,酝酿成的热泪。\n我把最心酸的委屈汇在那里,\n你不懂我,我不怪你。"; SpannableString spanStr = new SpannableString(str);
//设置字体的绝对大小,原来字体为20sp,所以10表示原来字体的一半。true表示字体大小与屏幕有关,与像素无关。
spanStr.setSpan(new AbsoluteSizeSpan(10, true), 2, 5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体的相对大小,正常大小为1,所以0.5f为原来的一半
spanStr.setSpan(new RelativeSizeSpan(0.5f), 7, 10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体的背景色
spanStr.setSpan(new BackgroundColorSpan(Color.CYAN), 11, 15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体的前景色
spanStr.setSpan(new ForegroundColorSpan(Color.MAGENTA), 16, 19,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置粗体
spanStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置下划线
spanStr.setSpan(new UnderlineSpan(), 30, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置超链接
spanStr.setSpan(new URLSpan("http://www.baidu.com"), 53, 66, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置textview超出屏幕是可滚动
tv.setMovementMethod(ScrollingMovementMethod.getInstance());
tv.setText(spanStr);
}
}

用SpannableString还可以设置很多属性,就不在用代码一一举例说明了。

  //设置字体样式正常,粗体,斜体,粗斜体 
        spanStr.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //正常 
        spanStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗体 
        spanStr.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //斜体 
        spanStr.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  //粗斜体 
         
        //设置下划线 
        spanStr.setSpan(new UnderlineSpan(), 27, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
         
        //设置删除线 
        spanStr.setSpan(new StrikethroughSpan(), 30, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
         
        //设置上下标 
        spanStr.setSpan(new SubscriptSpan(), 34, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //下标    
        spanStr.setSpan(new SuperscriptSpan(), 36, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   //上标             
         
        //超级链接(需要添加setMovementMethod方法附加响应) 
        spanStr.setSpan(new URLSpan("tel:4155551212"), 37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //电话    
        spanStr.setSpan(new URLSpan("mailto:webmaster@google.com"), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件    
        spanStr.setSpan(new URLSpan("http://www.baidu.com"), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络    
        spanStr.setSpan(new URLSpan("sms:4155551212"), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto: 
        spanStr.setSpan(new URLSpan("mms:4155551212"), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto: 
        spanStr.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图    
         
        //设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍 
        spanStr.setSpan(new ScaleXSpan(2.0f), 49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变

用SpannableString来设置一个textview的各种样式的更多相关文章

  1. 【table】给table表格设置一个通用的css3样式(默认有斑马条纹)

    /* = 表格(默认有斑马条纹) ------------------------------------------ */ .data-table { margin: 10px 0; } .data ...

  2. Android 一个TextView中设置多种不同大小的字体,设置超链接

    以前项目中要是遇到这样的UI设计,都是傻不拉唧的分为三个TextView来实现,今天在微信中无意中看了一篇公众号文章,发现原来只要一个TextView就可以搞定啦,人生最悲哀的事情莫过于工作了这么久啦 ...

  3. 高效快捷解决一个TextView显示多种字体的控件SpannableTextView

    这个控件本人强烈推荐,它会使得布局非常的简单且高效: 下面这个布局如果是你,你会用多少层?多少控件生成? 告诉你吧,一个SpannableTextView控件就搞定了! 它把TextView和Span ...

  4. 浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时

    今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许 ...

  5. Android textAppearance的属性设置及TextView属性详解

    textAppearance的属性设置 android:textAppearance="?android:attr/textAppearanceSmall" android:tex ...

  6. 如何通过命令行创建和设置一个MySQL用户

    我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...

  7. 如何设置一个严格30分钟过期的Session(转载)

    本文地址: http://www.laruence.com/2012/01/10/2469.html 今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: &quo ...

  8. 怎样设置一个DIV在所有层的最上层,最上层DIV

    怎样设置一个DIV在所有层的最上层,最上层DIV,其实很简单,只需要在这个DIV上使用这个样式即可,z-index:99999

  9. 解决微信OAuth2.0网页授权回调域名只能设置一个的问题

    https://github.com/HADB/GetWeixinCode GetWeixinCode 解决微信OAuth2.0网页授权回调域名只能设置一个的问题 使用方法 部署get-weixin- ...

随机推荐

  1. BZOJ 2165: 大楼

    Time Limit: 40 Sec Memory Limit: 259 MB Submit: 957 Solved: 353 [Submit][Status][Discuss] Descriptio ...

  2. 页面跳转不带 referrer的方法

    如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带 referer: <meta name="referrer" content="neve ...

  3. JS钩子的机制与实现

    [什么是钩子] 接触过WordPress的朋友都知道,WP的程序中可以执行类似钩子的函数,当然是这PHP实现的钩子.在JavaScript中一样可以实现类似的功能. 用一句话来形容一下:钩子是将需要执 ...

  4. Django之数据库连接与建模

    Django数据库链接(这里以Mysql为例) 需要准备 Django1.10 pip install django==1.10 -i https://pypi.tuna.tsinghua.edu.c ...

  5. Leetcode459.Repeated Substring Pattern重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...

  6. Linux User and Group Management

    linux is a multi-user and multitasking OS. In Linux, you can create any number of user account and g ...

  7. create user

    create创建的用户,只有usage权限,即,连接数据库的权限,最低的权限. # 1.新建用户,这里的用户是由user_name 和ip一起唯一确定一个用户.# 2.若省略ip表达式,则表示%,即所 ...

  8. loading遮罩

    .loading{ position: relative; cursor: default; point-events: none; text-shadow: none!important; colo ...

  9. java.lang.NoSuchMethodError: org.apache.commons.io.FileUtils.copyInputStreamToFile(Ljava/io/InputStream;Ljava/io/File;)V

    昨天用的好好的,今天就不行了 也懒得搞 具体原因就是引用的问题 找了个能用的pom 直接贴过去完事儿

  10. 备忘录模式(Memento、Originator、Caretaker)(状态保存,备份恢复)

    定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时 ...