前言:

TestView控件相信大家并不陌生。TestView其实就是用来显示字符串的组件,在手机上就是显示一块文本的区域。向用户显示文本,并可选择允许他们编辑文本。本文主要讲在实际开发过程中,我们经常需要用到的几种用法。
对于TestView的基本介绍和所有属性大全,如果还有不是很了解的,可以直接再看下官方api文档:

http://www.android-doc.com/reference/android/widget/TextView.html

以下,我们直接开始介绍

一. TestView 实现图文混排

可以使用Html.fromHtml(source, imageGetter, tagHandler)通过自定义imageGetter来异步加载图片,下面直接开始贴代码:

//使用反射机制来获取资源的id的字段(静态变量)的值
public int getResourceId(String name) {
    try {
        // 根据资源的id名的变量取得field的对象,使用反射机制来实现
        Field field = R.drawable.class.getField(name);
        // 取得并返回资源的id的字段(静态变量)的值,使用反射机制
        return Integer.parseInt(field.get(null).toString());
    } catch (Exception e) {
    }
    return 0;
}

需要注意的地方点:

  • 在getDrawable方法中使用获得图像资源的Drawable对象后,必须使用Drawable.setBounds方法设置图像的显示区域,否则显示区域的面积为0,也就不会在TextView中显示图像了。通过SetBounds方法还可以将原图像放大或缩小显示。
  • TagHandler对象。这个参数使用的并不多。当系统处理每一个标签时都会调用该对象的handleTag方法。如果不使用该参数,可将它设为null。

实现代码:

String hmtl = "android 标签一<img src='pic1'/><br>android 标签二<img src='pic2'/><br>android 标签三<img src='pic3'/><br>android 标签四<img src='pic4'/><br>android 标签五<img src='pic5'/><br>";
CharSequence charSequence = Html.fromHtml(hmtl, new ImageGetter() {
    public Drawable getDrawable(String source) {
        // 获得资源系统的信息,比如图片信息//根据名字,获取图片id,再根据id获取当前工程下的drawable文件中的图片
        Drawable drawable = MainActivity.this.getResources()
                .getDrawable(getResourceId(source));
        // 当名字等于pic3的时候,使图片变小
        if (source.equals("pic3")) {
            // IntrinsicWidth内部固有的宽IntrinsicHeight内部固有的高
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth() / 2,
                    drawable.getIntrinsicHeight() / 2);
        } else {
            // IntrinsicWidth内部固有的宽IntrinsicHeight内部固有的高
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
                    drawable.getIntrinsicHeight());
        }
        return drawable;
    }
}, null);
testView.setText(charSequence);
testView.setMovementMethod(LinkMovementMethod.getInstance());

然后看下效果图:

Android TextView常用用法总结_android

二. TestView 显示丰富的文本

在TextView中预订了一些类似html的标签,通过标签可以使TextView控件显示不同颜色、大小、字体的文字。点击连接实现跳转指定网址,发email,拨号。

更多关于HTML中标签的使用,请参考:

http://www.w3school.com.cn/tags/tag_font.asp

使用这些标签时,可以用Html.fromHtml()方法将这些标签的字符串转换成CharSequence对象,然后在TextView中通过setText()方法将CharSequence对象显示出来。

String html="<font color='red'>这是红色的一栏</font><br><br>";
//<p>表示段落符
html+="<font color='#0000ff'><i><big>这是蓝色的一行</big></i></font><p>";
html+="<a href=''>donkor_的博客</a><br>";
CharSequence charsequence=Html.fromHtml(html);
textView1.setText(charsequence);
textView1.setMovementMethod(LinkMovementMethod.getInstance());

String text="tel:1008611\r\n";
text+="email:donkor@yeah.net\r\n";
text+="url:";
textView2.setText(text);
textView2.setMovementMethod(LinkMovementMethod.getInstance());

这里需要注意的是,在xml中需要对第二个TextView设置自动识别链接,值all为匹配所有,包括Web网址,电话号码,Email地址。

android:autoLink=”all”

下面看下效果图 :

Android TextView常用用法总结_控件_02

三. TestView 点击文字弹出Activity

点击文字弹出Activity,在实际开发中,需要对点击文本进行跳转事件的时候经常需要用到,实现过程比较简单,下面直接上代码:

//标签文本
SpannableString s1=new SpannableString("跳转到第一个Activity");
SpannableString s2=new SpannableString("跳转到第二个Activity");       
//设置标签点击事件
s1.setSpan(new ClickableSpan() {
    public void onClick(View arg0) {
        Intent intent=new Intent(MainActivity.this,FristActivity.class);
        startActivity(intent);
    }//最后一个参数表示从头到尾都可以点击执行
}, 0,s1.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

s2.setSpan(new ClickableSpan() {
    public void onClick(View arg0) {
        Intent intent=new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    }
}, 0, s2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

textView1.setText(s1);
textView2.setText(s2);

textView1.setMovementMethod(LinkMovementMethod.getInstance());
textView2.setMovementMethod(LinkMovementMethod.getInstance());

看下效果图:

Android TextView常用用法总结_html_03

四. TestView 实现跑马灯效果

所谓跑马灯效果就是当文字超过控件所能容纳的空间时,在展现的界面内滚动,多用于广告语。网上实现跑马灯的实例代码有很多,这里仅介绍最简单的一种,直接用动画即可。下面直接看代码:

String html = "Android<a href=''>donkor的博客</a> donkor的博客";
CharSequence charSequence = Html.fromHtml(html);
textView.setText(charSequence);
textView.setMovementMethod(LinkMovementMethod.getInstance());

Animation ani = new TranslateAnimation(310f, -400f, 0.0f, 0.0f);
ani.setDuration(10000);
ani.setRepeatCount(500);
ani.setRepeatMode(1);
textView .startAnimation(ani);
String html = "Android<a href=''>donkor的博客</a> donkor的博客";
CharSequence charSequence = Html.fromHtml(html);
textView.setText(charSequence);
textView.setMovementMethod(LinkMovementMethod.getInstance());

Animation ani = new TranslateAnimation(310f, -400f, 0.0f, 0.0f);
ani.setDuration(10000);
ani.setRepeatCount(500);
ani.setRepeatMode(1);
textView .startAnimation(ani);

最后看下效果图:

Android TextView常用用法总结_textview_04

Demo下载