技术标签: android spannable 设置字体颜色
Android SpannableString设置超链接、颜色、字体等属性
在Android中,TextView是我们最常用的用来显示文本的控件。
一般情况下,TextView中的文本都是一个样式。那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下。
package com.snowdream;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.AbsoluteSizeSpan;
import android.text.style.BackgroundColorSpan;
import android.text.style.BulletSpan;
import android.text.style.DrawableMarginSpan;
import android.text.style.ForegroundColorSpan;
import android.text.style.IconMarginSpan;
import android.text.style.ImageSpan;
import android.text.style.RelativeSizeSpan;
import android.text.style.ScaleXSpan;
import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.TextAppearanceSpan;
import android.text.style.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView;
public class TextViewLinkActivity extends Activity {
TextView mTextView = null;
SpannableString msp = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.myTextView);
//创建一个 SpannableString对象
msp = new SpannableString("字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot");
//设置字体(default,default-bold,monospace,serif,sans-serif)
msp.setSpan(new TypefaceSpan("monospace"),2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
msp.setSpan(new TypefaceSpan("serif"),4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体大小(绝对值,单位:像素)
msp.setSpan(new AbsoluteSizeSpan(20),6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
msp.setSpan(new AbsoluteSizeSpan(20,true),8,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
//设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
msp.setSpan(new RelativeSizeSpan(0.5f),10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //0.5f表示默认字体大小的一半
msp.setSpan(new RelativeSizeSpan(2.0f),12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体大小的两倍
//设置字体前景色
msp.setSpan(new ForegroundColorSpan(Color.MAGENTA),15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置前景色为洋红色
//设置字体背景色
msp.setSpan(new BackgroundColorSpan(Color.CYAN),18,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置背景色为青色
//设置字体样式正常,粗体,斜体,粗斜体
msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL),20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //正常
msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD),22,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗体
msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),24,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //斜体
msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),27,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗斜体
//设置下划线
msp.setSpan(new UnderlineSpan(),30,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置删除线
msp.setSpan(new StrikethroughSpan(),33,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置上下标
msp.setSpan(new SubscriptSpan(),34,35,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //下标
msp.setSpan(new SuperscriptSpan(),36,37,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上标
//超级链接(需要添加setMovementMethod方法附加响应)
msp.setSpan(new URLSpan("tel:4155551212"),39,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //电话
msp.setSpan(new URLSpan("mailto:[email protected]"),41,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //邮件
msp.setSpan(new URLSpan("http://www.baidu.com"),43,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //网络
msp.setSpan(new URLSpan("sms:4155551212"),45,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //短信 使用sms:或者smsto:
msp.setSpan(new URLSpan("mms:4155551212"),47,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //彩信 使用mms:或者mmsto:
msp.setSpan(new URLSpan("geo:38.899533,-77.036476"),49,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //地图
//设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
msp.setSpan(new ScaleXSpan(2.0f),51,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
//设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)
ColorStateList csllink = null;
ColorStateList csl = null;
XmlResourceParser xppcolor=getResources().getXml (R.color.color);
try {
csl= ColorStateList.createFromXml(getResources(),xppcolor);
}catch(XmlPullParserException e){
// TODO: handle exception
e.printStackTrace();
}catch(IOException e){
// TODO: handle exception
e.printStackTrace();
}
XmlResourceParser xpplinkcolor=getResources().getXml(R.color.linkcolor);
try {
csllink= ColorStateList.createFromXml(getResources(),xpplinkcolor);
}catch(XmlPullParserException e){
// TODO: handle exception
e.printStackTrace();
}catch(IOException e){
// TODO: handle exception
e.printStackTrace();
}
msp.setSpan(new TextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC,csl,csllink),53,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置项目符号
msp.setSpan(new BulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN),msp.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
//设置图片
Drawable drawable = getResources().getDrawable(R.drawable.icon);
drawable.setBounds(0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
msp.setSpan(new ImageSpan(drawable),57,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mTextView.setText(msp);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
小编个人微信号 jb51ccc
喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!
文章浏览阅读3.1k次,点赞2次,收藏6次。最近,在打开下载的office文档(包括word、excel、ppt等)时候,总是无法直接打开,错误提示如下:无论是邮件中的还是别的网站下载的,均提示该错误。后来搜索相关资料发现,修改其文件属性即可打开(属性---》解除锁定)。但是也不能每次下载文件都去修改呀,太费事了。原因分析:这一切都要从WindowsXP的SP2说起,在SP2之前,大概是2004年吧,由于当时互联网得到了一个比较大的发展,导..._此文件来自其他计算机可能被阻止
文章浏览阅读3.8k次。升级了谷歌最新版不习惯,如何降级版本未完待续。。电脑中的Chrome谷歌浏览器升级到了最新版本,但是有种种的不适应,如何能恢复到之前的旧版本呢?我们来看看操作步骤,而且无需卸载重装。怎么恢复Chrome 之前版本?1、关闭Chrome进程,打开chrome.exe所在目录,在Win8下的路径是(X:\Users\用户名\AppData\Local\Google\Chrom..._如何将googlecharme的版本降低
文章浏览阅读5k次。某天突发奇想,能不能通过软件把电脑主机和显示器绑定,于是研究了下,发现需要获取显示器的DDC信息,通过驱动层面获取难度比较大,网上查询了下,linux的driver里video中有相关代码段,通过一直可以搞定,不过没有尝试,最后通过注册表发现了一个键值也能达到目的,HKEY_LOCAL_MACHINE->SYSTEM->ControlSet001->Enum->Display中的第一项就是_edid-decode查询显示器序列号
文章浏览阅读2.3w次,点赞95次,收藏75次。数据中台是企业开展数据要素相关实践和数字化转型的关键基础设施,拥有一个高效的数据中台是任何企业都无法忽视的事情,通过数据中台,企业可以构建自己的数据基座,让数据流转起来,形成闭环,为业务创新源源不断地赋能,在把自身隐藏的或被低估的潜能激发出来的同时,加速企业数字化转型,重构数字战斗力。_周傲英
文章浏览阅读3k次。微信小程序分为“视图层”和“逻辑层”。视图层是在 webview 中渲染,逻辑层则用 JavaScriptCore 来渲染。其中视图层可以有多个,但逻辑层则只有一个。小程序中视图层负责页面渲染,逻辑层负责逻辑处理、状态管理、请求和接口调用。逻辑层和视图层的通信是通过微信的 JSBridge 实现的。逻辑层数据变化通过 JSB 通知到视图层,触发视图层更新;当视图层触发事件则继续通过 JSB 将事件通知到逻辑层做处理。WeixinJSB 在开发者工具、IOS 和 Android 的实现机制不同。在调用 Na_微信小程序document
文章浏览阅读287次。工具: 1.PETool 2.HxD 步骤: 1.PE查看rar程序的结构: 重定位的具体信息如下: 2.删除.reloc的节区头 从地址278开始,删除到29c+3 这部分清零。 3.删除.reloc节区 ..._减少重定位表
文章浏览阅读241次。转自博客园前言前言1. 什么是单点登录单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。前言1.2 ..._cas的过滤器分析
文章浏览阅读498次。1. 安装(Windows)1.1 首先需要下载 git 的安装包1.2 下载完成之后双击安装包进行安装,安装比较简单,一路 next 就行1.3 安装完成之后我们鼠标右击和开始菜单中都可以找到 git注:Git Bash 打开为 Linux 的命令行(使用Linux的命令),Git CMD 使用的是 windows 下的 CMD命令,Git GUI是Git提供的一个界面化的操作面板,按照自己喜好方式选择,个人建议 Git Bash,但是 git 命令是统一的无需纠结。1.4 测试安装打开G_java git 安装配置
文章浏览阅读973次。2020开学季手机如何选之手机CPU处理器SOC性能天梯图、后置拍照和前置拍照排行天梯(0903)本天梯持续更新,敬请关注收藏。天梯图目录1. 手机CPU(soc)性能排行榜天梯(20200723)2. 手机后置拍照性能天梯(20200811)3. 手机前置拍照性能天梯(20200811)4. 手机后置视频拍摄性能天梯(20200811)5. 手机前置视频拍摄性能天梯(20200811)6. 手机..._cpuz测试排行榜
文章浏览阅读2.8k次。这是一段关于高级错误报告的信息,其中包含多个字段和值。_pci_capability_pciexp
文章浏览阅读4.3w次,点赞9次,收藏5次。PotPlayer 无损截取视频片段_potplayer录制怎么无损画质
文章浏览阅读1.7k次。记录一下大额数据转换,bigNumberTransform (value) { const newValue = ['', '', ''] let fr = 1000 let num = 3 let text1 = '' let fm = 1 while (value / fr >= 1) { fr *= 10 num += 1 // console.log('数字', value / fr, 'num:', num) _js如何分离出1000.1万9.5亿数字和单位