TextView在Android中实现文字说明等功能,基本的使用都很简单,那么除了基本展示文字的使用,我们还能够经常使用TextView实现如下的功能:

1.显示丰富的文本(URL、字体大小、颜色等)

TextView中预定了一些类似Html的标签,通过标签可以使TextView显示不同的颜色、大小、字体的文字。

  • <font> : 设置颜色和字体
  • <big>: 设置大号
  • <small>: 设置小号
  • <i><b>: 斜体、粗体
  • <a>: 链接地址
  • <img>: 插入图片

使用这些标签可以使用Html.fromHtml方法。

2.将文本中的URL地址、邮箱地址、电话产生超链接的效果

使用android:autoLink来设置,首先在的layout文件夹里面TextView控件增加

android:autoLink="all"

然后在Java中进行设置:

textview.setMovementMethod(LinkMovementMethod.getInstance());

这样展示出现的内容就可以出现超链接的效果。例如,在TextView点击网址链接后,就可以调转到浏览器并打开响应的链接。内容可以是Html格式的内容,也可以是String格式的,在使用Html显示超链接的时候,必须保证添加上协议好,例如:http://。否则在识别网址的时候,不加的话,可能会判断为Activity,然后导致崩溃。使用String格式的内容,在TextView添加setAutoLinkMask(Linkify.ALL)设置之后,可以不加协议识别出来链接,但是推荐还是加上。而这两种方法,都得设置一下setMovementMethod,才会跳转。   

3.TextView显示表情图像和文字

如果需要在TextView里面展示res资源里面的图片的话,可以通过编写html内容,并通过Html.fromHtml方法来将内容转换为CharSequence来显示。

显示的核心代码:

String html = "图像1<image='image1'>";  // 其中image1就是图片在drawable的name
Html.fromHtml(html, new ImageGetter() { @Overrride
public Drawable getDrawable(String source) {
Drawable drawable = getResource.getDrawable(getResourceId(source));
return drawable;
}
} public int getResourceId(String name) {
try {
// 根据资源ID的变量名获得Field的对象,使用反射机制来实现的
Field field = me.renhui.drag_sort_listview.R.drawable.class.getField(name);
// 取得并返回资源的id的字段(静态变量)的值,使用反射机制
return Integer.parseInt(field.get(null).toString());
} catch (Exception e) {
e.printStackTrace();
}
return 0;
} 

4.TextView单击链接触发点击事件(本例事件是弹出Activity也可以替换为其他事件)

通过对TextView的内容设置span来给TextView设置点击事件,这样的话就能够通过点击点击TextView中的链接来弹出Activity

String text1 = "弹出Activity1";
String text2 = "弹出Activity2";
SpannableString spannableString = new SpannableString (text1);
SpannableString spannableString2 = new SpannableString (text2); spannableString.setSpan(new ClickableSpan() {
@Overrride
public void onclick(View widge) {
// TODO 实现弹出逻辑
}
}, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

5.TextView实现跑马灯的效果

基本的实现方式就是在xml设置TextView的属性:

android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true" // 不添加这个属性不能成功跑动起来

6. TextView 实现删除线的效果

设置删除线的方式如下:

通过按位或运算符|,将 TextView 原本的 Flags 属性和删除线一块设置。setPaintFlags内会对 TextView 进行重绘:

tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

获取画笔后设置属性,重绘 TextView 。此方式有个问题,会把 TextView 原本的 Flags 属性替代,例如抗锯齿等。仔细查看,你会发现通过这种方式,文字有了锯齿。此时需要添加如下代码来优化一下:

tv.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
tv.invalidate();

TextView 取消删除线有两种方式:

方式一(推荐)

先对 Paint.STRIKE_THRU_TEXT_FLAG 属性取反,再用按位与运算符&,除去了删除线属性并保留了 TextView 原本的 Flags 属性。setPaintFlags内会对 TextView 进行重绘。

tv.setPaintFlags(tv.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));

方式二:

获取画笔后,清空 Flags 属性,再重绘 TextView 。此方式有个问题,会把 TextView 原本的所有 Flags 属性清空,例如抗锯齿等。仔细查看,你会发现通过这种方式,文字有了锯齿;

tv.getPaint().setFlags(0);
tv.invalidate();

7. TextView 出现异常换行的处理方法

   // 半角转换成全角
private String toSBC(String input) {
char c[] = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == ' ') {
c[i] = '\u3000';
} else if (c[i] < '\177') {
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}   
// 全角转换成半角
private String toDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 12288) {
//全角空格为12288,半角空格为32
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
//其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}

8. TextView 一行,最多显示10个字符,剩余的用...代替

mTitleTxt.setSingleLine(); // 单行显示
mTitleTxt.setMaxEms(10); // 最大十个字符
mTitleTxt.setEllipsize(TextUtils.TruncateAt.END); // 剩余的以...结尾

9. TextView 展示字母的时候,明明是小写,但界面上看到的都是大写 解决方案

添加属性:

android:textAllCaps="false"

这个问题也存在于Button等其他控件,解决的方案同TextView。

Android TextView 常用技巧的更多相关文章

  1. Android ListView 常用技巧

    Android ListView 常用技巧 Android TextView 常用技巧 1.使用ViewHolder提高效率 ViewHolder模式充分利用了ListView的视图缓存机制,避免了每 ...

  2. Android ListView 常用技巧总结

    本文对 ListView 中的一些常用技巧做一个总结.附:虽然现在 RecyclerView 已逐渐取代 ListView,但实际情况是大部分项目中还在使用 ListView.当然,后续我会在我的博客 ...

  3. Android adb 常用技巧

    1.在命令行管理模拟器设备(AVD) list:列出机器上所有已经安装的Android版本和AVD设备 list avd:列出机器上所有已经安装的AVD设备: list target:列出机器上所有已 ...

  4. Android TextView常用属性

    [说明] TextView是用来显示文本的组件.以下介绍的是XML代码中的属性,在java代码中同样可通过 "组件名.setXXX()方法设置.如,tv.setTextColor(); [属 ...

  5. Android Activity 常用技巧

    1.设置 Activity 背景色为透明 在style.xml里面声明: <style name="TranslucentActivityStyle" parent=&quo ...

  6. Android Studio 常用技巧

    1.在控制台输出语句方法 //在控制台输出语句 System.out.println("like"); //方式1 Log.d("002","lind ...

  7. Android之ListView常用技巧

    ListView是一个非常常用的列表控件,虽然在5.x时代ListView的风头正在逐渐的被RecyclerView抢去,但是ListView的使用范围依然十分广泛. 接下来的ListView的常用技 ...

  8. android TextView EditTextView一些技巧使用 (视图代码布局)

    android TextView 是最常用的控件 可以用作普通的显示,还可以用作有显示文字的按钮,用作有显示图片的图文组合 1. 图文组合 xml 中: <TextView android:id ...

  9. 【转】你所不知道的Android Studio调试技巧

    这篇写Android studio debug技巧个人觉得写得不错,转自:http://www.jianshu.com/p/011eb88f4e0d# Android Studio目前已经成为开发An ...

随机推荐

  1. Android Studio--Gradle基础(转)

    原文链接:http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/ 其实很早之前也写了一篇Gradle的基础博客,但是时间 ...

  2. Freemarker常用指令使用范例

    我的開發環境 框架:           springmvc+freemarker 開發工具:    springsource-tool-suite-2.9.0 JDK版本:    1.6.0_29 ...

  3. Arcgis API For IOS扩展AGSDynamicLayer新旧版API对比

    AGSDynamicLayer(ForSubclassEyesOnly) Category Reference Description This category organizes the meth ...

  4. 用 R 进行高频金融数据分析简介

    作者:李洪成 摘自:http://cos.name/wp-content/uploads/2013/11/ChinaR2013SH_Nov03_04_LiHongcheng.pdf 高频数据 金融市场 ...

  5. Python 学习---------Day4

    第十章 Python语句简介Python的代码书写要求,以及换行等语句可以扩越多行,只要将其封闭在圆括号内,方括号内或大括号内即可,可以使用分号终止.用\可以允许我们跨越多行一个简单的交互式循环whi ...

  6. 位图图像处理控件ImageCapture Suite更新至v9.1

    概述:Dynamsoft公司旗下非常出名的位图图像处理控件ImageCapture Suite更新至了v9.1,这次新版本为Mac版本和IE 9新增了不少功能,同时还对其他组件的性能进行了质的提高! ...

  7. 类型“System.Windows.Markup.IUriContext”在未被引用的程序集中定义 解决办法

    错误 CS0012: 类型“System.Windows.Markup.IUriContext”在未被引用的程序集中定义.必须添加对程序集“System.Xaml, Version=4.0.0.0, ...

  8. Json格式的字符串转换为正常显示的日期格式

    //返回自定义格式日期: 2015-07-17 13:53:37function ChangeDateFormat(jsondate) { jsondate = jsondate.replace(&q ...

  9. java小结

    1.UUID.randomUUID()是潜在线程安全的,SecureRandom.nextBytes()为synchronized

  10. Cordova for iOS[ PhoneGap]

    安装这个费了点劲,和早前的PhoneGap有些不同. Cordova支持如下移动操作系统:iOS, Android,ubuntu phone os, Blackberry, Windows Phone ...