Android TextView高级用法
2018-05-17 本文已影响3人
翻译不了的声响
TextView 通常用来显示普通文本,但TextView的功能并不局限于此。它还有一些高级特性,包括自定义字体、文字大小颜色、字体样式、多种特效,html嵌入、插入图片等等。虽然平时可能使用得不多,但是需要的时候却是很有用的特性。下面就和大家一起分享下TextView的高级用法。
效果图1. 设置字体大小颜色样式效果
TextView text = (TextView) findViewById(R.id.text);
SpannableString span = new SpannableString("设置字体样式大小放大前景色背景色正常粗体斜体粗斜体下划线删除线上标下标超链接电话邮件网络短信彩信地图缩放效果模糊效果浮雕效果插入图片文本点击事件");
Spanable中的常用常量:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE —— 前后都不包括 (a,b)
Spanned.SPAN_EXCLUSIVE_INCLUSIVE —— 前面不包括,后面包括 (a,b]
Spanned.SPAN_INCLUSIVE_EXCLUSIVE —— 前面包括,后面不包括 [a,b)
Spanned.SPAN_INCLUSIVE_INCLUSIVE —— 前后都包括 [a,b]
-
设置字体
字体(default
,default-bold
,monospace
,serif
,sans-serif
)
span.setSpan(new TypefaceSpan("monospace"), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new TypefaceSpan("serif"), 2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
- 设置字体大小
span.setSpan(new AbsoluteSizeSpan(20), 4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new AbsoluteSizeSpan(20,true), 6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new RelativeSizeSpan(2.0f), 8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
AbsoluteSizeSpan()
字体大小为绝对值,单位:像素;第二个参数如果为“true”,则前面的字体大小单位为“dp”,否则为“px”。
RelativeSizeSpan()
字体大小为相对值,单位:像素; 参数表示为默认字体大小的多少倍。
- 设置字体颜色
//设置字体前景色
span.setSpan(new ForegroundColorSpan(Color.BLUE), 10, 13, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//设置字体背景色
span.setSpan(new BackgroundColorSpan(Color.GREEN), 13, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
-
设置字体样式
设置字体样式正常,粗体,斜体,粗斜体
span.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 16, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //正常
span.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 18, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗体
span.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //斜体
span.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 22, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗斜体
text.append(span);
- 设置下划线
span.setSpan(new UnderlineSpan(), 25, 28, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
- 设置删除线
span.setSpan(new StrikethroughSpan(), 28, 31, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
- 设置上下标
span.setSpan(new SuperscriptSpan(), 31, 33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上标
span.setSpan(new SubscriptSpan(), 33, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //下标
text.append(span);
- 设置超链接
span.setSpan(new URLSpan("tel:4155551212"), 35, 40, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //电话
span.setSpan(new URLSpan("mailto:webmaster@google.com"),40, 42, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //邮件
span.setSpan(new URLSpan("http://www.baidu.com"), 42, 44, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //网络
span.setSpan(new URLSpan("sms:4155551212"), 44, 46, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //短信 使用sms:或者smsto:
span.setSpan(new URLSpan("mms:4155551212"), 46, 48, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //彩信 使用mms:或者mmsto:
span.setSpan(new URLSpan("geo:38.899533,-77.036476"), 48, 50, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //地图
text.append(span);
- 缩放效果
span.setSpan(new ScaleXSpan(2.0f), 50, 54, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
ScaleXSpan()
X轴方向放大为默认字体的倍数,而高度不变;2.0f 表示默认字体宽度的两倍。
- 修饰效果
//模糊
span.setSpan(new MaskFilterSpan(new BlurMaskFilter(20, BlurMaskFilter.Blur.NORMAL)), 54, 58, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//浮雕
span.setSpan(new MaskFilterSpan(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f)), 58, 62, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
- 插入图片
span.setSpan(new ImageSpan(this, R.mipmap.ic_launcher), 62, 66, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
- 文本点击事件
ClickableSpan click = new ClickableSpan() {
@Override
public void onClick(View widget) {
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor);//设置可以点击文本部分的颜色
ds.setUnderlineText(true);//设置该文本部分是否显示超链接形式的下划线
}
};
span.setSpan(click,66, 72, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.append(span);
2. 渐变色
Shader shader = new LinearGradient(
0, 0, 0, text.getTextSize(),
Color.RED, Color.BLUE,
Shader.TileMode.CLAMP);
text.getPaint().setShader(shader);
3. 阴影效果
关键代码如下:
android:shadowColor //指定文本阴影的颜色
android:shadowDx //设置阴影横向坐标开始位置
android:shadowDy //设置阴影纵向坐标开始位置
android:shadowRadius //设置阴影的半径
4. 跑马灯效果
关键代码如下:
android:ellipsize="marquee" //设置为跑马灯显示
android:focusable="true"//获取焦点
android:focusableInTouchMode="true"//可以通过toucth来获得focus
android:marqueeRepeatLimit="marquee_forever" //设置重复的次数
android:singleLine="true" //单行显示文字
5. 设置Html格式
-
支持的Html标签
Textview只支持部分的html标签。具体如下:
标签 | 说明 |
---|---|
<a> |
定义超链接 |
<b> |
定义粗体文本 |
<big> |
定义大号字体效果 |
<blockquote> |
定义块引用 |
<br> |
定义换行 |
<cite> |
定义文档引用 |
<dfn> |
定义那些对特殊术语或短语的定义 |
<div> |
定义文档中的分区或节 |
<em> |
定义强调的内容 |
<font> |
定义文本的字体、字体尺寸、字体颜色 |
<h1> - <h6> |
定义标题,<h1> 定义最大的标题,<h6> 定义最小的标题 |
<i> |
定义斜体文本效果 |
<img> |
定义网页中图像 |
<p> |
定义段落 |
<small> |
定义小号字体效果 |
<strike> |
定义删除线样式文本 |
<strong> |
定义重点强调内容 |
<sub> |
定义下标文本 |
<sup> |
定义上标文本 |
<tt> |
定义打字机文本 |
<u> |
定义下划线文本 |
-
Html格式文本大小颜色
Android支持 html格式的字符串,通过调用Html.fromHtml(str)
方法可以转换 html格式的字符串 str。示例代码如下:
TextView text = (TextView) findViewById(R.id.text);
String textStr1 = "<font >Html格式文本,</font>";
String textStr2 = "<font color='red'>Html格式文本颜色,</font>";
String textStr3 = "<font size='3'>Html格式文本大小。</font>";
text.setText(Html.fromHtml(textStr1 + textStr2+ textStr3));
- 字体样式
字体加粗:
String textStr1 = "<b>字体加粗</b>";
text.setText(Html.fromHtml(textStr1));
字体变斜:
String textStr2 = "<i>字体变斜</i>";
text.setText(Html.fromHtml(textStr2));
6. 自定义字体
//保存在 assets/kaiti.ttf 目录下字体文件
Typeface mTypeFace = Typeface.createFromAsset(getAssets(), "kaiti.ttf");
text.setTypeface(mTypeFace);
7. 添加图片
xml中布局中:
android:drawableLeft //文本左边添加一张图片
android:drawableTop //文本上边添加一张图片
android:drawableRight //文本右边添加一张图片
android:drawableBottom //文本下边添加一张图片
android:drawablePadding //文本与图片的间距
Java中代码中:
text.setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom);