用SpannableString来设置一个textview的各种样式
通常情况下,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的各种样式的更多相关文章
- 【table】给table表格设置一个通用的css3样式(默认有斑马条纹)
/* = 表格(默认有斑马条纹) ------------------------------------------ */ .data-table { margin: 10px 0; } .data ...
- Android 一个TextView中设置多种不同大小的字体,设置超链接
以前项目中要是遇到这样的UI设计,都是傻不拉唧的分为三个TextView来实现,今天在微信中无意中看了一篇公众号文章,发现原来只要一个TextView就可以搞定啦,人生最悲哀的事情莫过于工作了这么久啦 ...
- 高效快捷解决一个TextView显示多种字体的控件SpannableTextView
这个控件本人强烈推荐,它会使得布局非常的简单且高效: 下面这个布局如果是你,你会用多少层?多少控件生成? 告诉你吧,一个SpannableTextView控件就搞定了! 它把TextView和Span ...
- 浅谈android中只使用一个TextView实现高仿京东,淘宝各种倒计时
今天给大家带来的是只使用一个TextView实现一个高仿京东.淘宝.唯品会等各种电商APP的活动倒计时.近期公司一直加班也没来得及时间去整理,今天难得歇息想把这个分享给大家.只求共同学习,以及自己兴许 ...
- Android textAppearance的属性设置及TextView属性详解
textAppearance的属性设置 android:textAppearance="?android:attr/textAppearanceSmall" android:tex ...
- 如何通过命令行创建和设置一个MySQL用户
我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...
- 如何设置一个严格30分钟过期的Session(转载)
本文地址: http://www.laruence.com/2012/01/10/2469.html 今天在我的微博(Laruence)上发出一个问题: 我在面试的时候, 经常会问一个问题: &quo ...
- 怎样设置一个DIV在所有层的最上层,最上层DIV
怎样设置一个DIV在所有层的最上层,最上层DIV,其实很简单,只需要在这个DIV上使用这个样式即可,z-index:99999
- 解决微信OAuth2.0网页授权回调域名只能设置一个的问题
https://github.com/HADB/GetWeixinCode GetWeixinCode 解决微信OAuth2.0网页授权回调域名只能设置一个的问题 使用方法 部署get-weixin- ...
随机推荐
- python登录aspx网站
1.安装模块 2.准备aspx登录页面 3.示例代码 #coding:utf-8 import re from bs4 import BeautifulSoup import gzip import ...
- spring定时任务scheduler集群环境下指定运行服务器防止多服务器多次执行
使用spring的@Scheduler注解可以非常方便的启动一个定时任务,但是当服务部署在多台服务器上做负载均衡的时候,可能会出现重复执行的情况. 现在我们通过代码指定job只在某一台机器执行. 首先 ...
- TZOJ 2965 A Coin Game(DP)
描述 Farmer John's cows like to play coin games so FJ has invented with a new two-player coin game cal ...
- Luogu P1314 聪明的质监员(二分+前缀和)
P1314 聪明的质监员 题意 题目描述 小\(T\)是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有\(n\)个矿石,从\(1\)到\(n\)逐一编号,每个矿石都有自己的重量\(w_i\) ...
- 【vue】vue-znly
老规矩,放下博主的项目地址:https://github.com/wohaiwo/vue-znly 我一直在想给那些开源者取什么名字比较好,怎样才对得起他们开源项目的精神,后来想想,还是叫博主吧.有的 ...
- 【noip】跟着洛谷刷noip题2
noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...
- PHP--http_build_query--把数组化成&key=value方式
- WPF 的另类资源方式 Resources.resx
类似Winform的搞法,可以把资源放到Resources.resx中. 1.字符串 打开这个编辑器后,输入Name和Value就可以了. CS代码里面,很简单的调用: var title = W ...
- Aspose Words、Excel导出等操作
/*Word先保存再输出-下载*/ strReportFilePath = Server.MapPath("~") + strReportFilePath; doc.Save(st ...
- 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次
数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...