您的位置:首页 > 移动开发 > Android开发

从零开始学Android之TextView

2011-11-03 15:15 197 查看
1:显示富文本(URL、不同大小、字体、颜色的文本)

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

<font>:设置颜色 <big>:设置大号字 <small>:设置小号字

<i>:斜体 <b>:粗体 <tt>:等宽字体(Monospace)

<br>:换行(行与行之间没有空行) <p>:换行(行与行之间的空行)

<a>:链接地址 <img>:插入图像

这些标签虽然和HTML的标签类似,但并不具备HTML标签的全部功能。如<font>标签只支持color和face两个属性。

在使用这些标签时不能将带这些标签的字符串直接赋值到TextView上,而需要使用Html.frmHtml方法将带标签的字符串转换成CharSequence对象,再赋值给TextView。

如果想在显示的文本中将URL、E-mail、电话等特殊内容高亮显示,并在单击时触发相应的动作(如单击电话会直接在拨号界面显示电话号码),

可以设置<TextView>标签的android:autoLink属性,该属性可设置的属性值如下:

none:不匹配任何链接(默认) web:匹配Web网址 email:匹配E-mail地址

phone:匹配电话号码 map:匹配映射地址 all:匹配所有的链接

下面是示例

view plainprint?

public class Main extends Activity {

<span style="white-space:pre"> </span>private TextView txtFirst,txtSecond;
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

txtFirst=(TextView)findViewById(R.id.txtFirst);
txtSecond=(TextView)findViewById(R.id.txtSecond);

view plainprint?

String html="<font color='red'>样式一</font> <br>";
html+="<font color='#0000FF'> <big> <i> 样式二 </i> </big> <font>";
html+="<font color='@"+android.R.color.white+"'> <tt> <b> <big> <u> 样式三 </u> </big> </b> </tt> </font> <br>";
html+="<big> <a href='http://blog.csdn.net/a_mean'>我的博客:http://blog.csdn.net/a_mean </a> </big>";

CharSequence charSequence=Html.fromHtml(html);
txtFirst.setText(charSequence);
//该语句在设置后必加,不然没有任何效果
txtFirst.setMovementMethod(LinkMovementMethod.getInstance());

}
}



2:显示表情图像和文字

这样的效果类似我们在网络上聊天时发出的表情和文字,我们添加一个<img>标签就可以很容易地实现。

<img>标签只有一个src属性,它指向一个图像地址或可以找到某个图像资源的唯一标识。

view plainprint?

public class Main extends Activity {

private TextView txtSecond;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

txtSecond = (TextView) findViewById(R.id.txtSecond);

String html = "很高兴<img src='gx' /> 很得意<img src='dy' />";
CharSequence charSequence = Html.fromHtml(html, new ImageGetter() {

@Override
public Drawable getDrawable(String source) {
Drawable drawable = getResources().getDrawable(
getResourceId(source));
//这句话必写,不然图片是有了 不过显示的面积为0.
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
return drawable;
}
}, null);

txtSecond.setText(charSequence);
txtSecond.setMovementMethod(LinkMovementMethod.getInstance());
}

/**
* 由于无法直接使用文件名来引用res/drawable中的图像资源, 我们利用反射技术 从R.drawable类中通过图像资源文件名,
* 去获得相应的图像资源ID,实现代码如下:
*/
public static int getResourceId(String name) {
int id = 0;
try {
Field field = R.drawable.class.getField(name);
id = Integer.parseInt(field.get(null).toString());
} catch (Exception e) {
e.printStackTrace();
}
return id;
}
}



3:单击链接弹出Activity

上面我们已经学会了使用让TextView自动识别的特殊文本,但要是我们想在单击TextView时执行我们自定义的动作要怎么办呢?

view plainprint?

public class Main extends Activity {

private TextView txtSecond;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

txtSecond = (TextView) findViewById(R.id.txtSecond);

String text="单击弹出Activity";
SpannableString spannableString =new SpannableString(text);
//把text中的所有文本设置成ClickableSpan对象,并实现onClick方法
spannableString.setSpan(new ClickableSpan() {

@Override
public void onClick(View widget) {
//这里做我们自定义的动作
Intent intent=new Intent(Main.this,Test.class);
startActivity(intent);
}
/**解释一下这个setSpan方法,第一个参数需要设置一个ClickableSpan对象,
* 第二个和第三个参数分别表示文本中要设置成Span的某段文本的起始位置和终止位置的下一个字符的位置
* 最后一个参数是一个标志,分别是:
* Spannable.SPAN_EXCLUSIVE_INCLUSIVE 在Span前的字符不应用Span的效果,后面的字符应用
* Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 在Span前的字符应用Span的效果,后面的不应用
* Spannable.SPAN_INCLUSIVE_INCLUSIVE 在Span前后的字符都应用Span的效果
*/
}, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
txtSecond.setText(spannableString);
txtSecond.setMovementMethod(LinkMovementMethod.getInstance());
}
}

4:为指定文字添加背景

有一个很常用的Span类叫BackgroundColorSpan,该类的功能是设置指定字符串的背景色:

第1步:将字符串转换成SpannableString对象

第2步:确定要设置的子字符串的start和end

第3步:创建BackgroundColorSpan对象

BackgroundColorSpan bgColorSpan=new BackgroundColorSpan(Color.RED);

第4步:使用setSpan方法将指定子字符串转换成BackgroundColorSpan对象

spannableString.setSpan(bgColorSpan,start,end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

第5步:用SpannableString对象设置TextView控件

textView.setText(spannableString);

textView.setMovementMethod(LinkMovementMethod.getInstance());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: