Android TextView

分享到:

TextView是Android开发过程中最常用的控件之一,主要用来显示文本信息。文档最后给出了几个TextView实例源码供大家参考。

类结构如下:

java.lang.Object

	android.view.View

		android.widget.TextView 

直接子类:
Button, CheckedTextView, Chronometer, DigitalClock, EditText
间接子类:
AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,MultiAutoCompleteTextView, RadioButton, ToggleButton

TextView XML 属性详解

android:ems 设置TextView的宽度为N个字符的宽度
android:maxems 设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。
android:minems 设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项
android:maxLength 限制输入字符数。如设置为5,那么仅可以输入5个汉字/数字/英文字母
android:lines 设置文本的行数,设置两行就显示两行,即使第二行没有数据
android:maxLines 设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示
android:minLines 设置文本的最小行数,与lines类似
android:lineSpacingExtra 设置行间距。
android:lineSpacingMultiplier 设置行间距的倍数。如"1.2"
android:numeric 如果被设置,该TextView有一个数字输入法。有如下值设置:integer正整数、signed带符号整数、decimal带小数点浮点数
android:password 密码模式,明文会被“.”替换
android:phoneNumber 设置为电话号码的输入方式
android:singleLine 设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用"…"来表示。如android:text="test_ singleLine " android:singleLine="true" android:layout_width="20dp"将只显示"t…"。如果不设置singleLine或者设置为false,文本将自动换行
android:textAppearance 设置文字外观。如"?android:attr/textAppearanceLargeInverse"这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观可用参数如下:
textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse
android:text 设置textview要显示的文字内容
android:textColor 设置文本颜色
android:textColorHighlight 被选中文字的底色,默认为蓝色
android:textColorHint 设置提示信息文字的颜色,默认为灰色。与hint一起使用。
android:textColorLink 文字链接的颜色.
android:textScaleX 设置文字之间间隔,默认为1.0f。参见TextView的截图。
android:textSize 设置文字大小,推荐度量单位"sp",如"15sp"
android:textStyle 设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用"|"隔开
android:typeface 设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3
android:height 设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)
android:maxHeight 设置文本区域的最大高度
android:minHeight 设置文本区域的最小高度
android:width 设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width的区别看这里。
android:maxWidth 设置文本区域的最大宽度
android:minWidth 设置文本区域的最小宽度
android:autoLink 可选值为(none/web/email/phone/map/all) 设置一个URL链接 ,可以点击访问。
例如:android:text="拨打手机:13800013800"
android:autoLink="phone"
这里设置了一个链接为手机的autoLink 它会自动设别数字 过滤掉字符串"拨打手机:" 从而点击号码后会转跳到系统拨号码的界面可以拨打电话。

Android TextView 实例

1、让TextView显示一行,文字超过TextView的长度的处理方法

1.1、在开头显示省略号,XML如下:

android:singleLine="true"  
android:ellipsize="start"

1.2、在中间显示省略号,XML如下:

android:singleLine="true"  
android:ellipsize="middle"

1.3、在结尾显示省略号,XML如下:

android:singleLine="true"  
android:ellipsize="end"

1.4、横向自动滚动(跑马灯效果),XML如下:

android:singleLine="true"  
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:focusable="true"
android:focusableInTouchMode="true"

1.5、TextView内容垂直滚动,JAVA代码如下:

textView.setMovementMethod(ScrollingMovementMethod.getInstance());  

2、TextView中设置不同样式的字体

需要使用的类:android.text.Spanned; android.text.SpannableString; android.text.SpannableStringBuilder
SpannableString和SpannableStringBuilder的区别就相当于String和StringBuffer
SpannableString和SpannableStringBuilder可以用来设置不同的Span,这些Span便是用于实现Rich TextView,比如粗体,斜体,前景色,背景色,字体大小,字体风格等等,android.text.style.*中定义了很多的Span类型可供使用。
常见的Span见下面的Demo
setSpan(Object what, int start, int end, int flags)中的flags可以设为0或Spanned中定义的值
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点
Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含start,但包含end
Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含start,但不包含end
Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含start和end所在的端点
其中0就相当于Spanned.SPAN_INCLUSIVE_INCLUSIVE
这里的包不包含就好比数学里面的开区间,闭区间
下面是一个Demo:(代码来源于网络)

package com.test123;

import android.app.Activity;
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.ForegroundColorSpan;
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.TypefaceSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;
import android.widget.TextView;

public class RichTextViewDemoActivity extends Activity {

	TextView mTextView = null;
	SpannableString mSpannableString = null;

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

		mTextView = (TextView) findViewById(R.id.myTextView);

		// 创建一个 SpannableString对象
		mSpannableString = new SpannableString(
				"字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴/bot");

		// 设置字体(default,default-bold,monospace,serif,sans-serif)
		mSpannableString.setSpan(new TypefaceSpan("monospace"), 0, 2,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		mSpannableString.setSpan(new TypefaceSpan("sans-serif"), 2, 4,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

		// 设置字体大小(绝对值,单位:像素)
		mSpannableString.setSpan(new AbsoluteSizeSpan(20), 4, 8,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

		// 设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
		mSpannableString.setSpan(new ScaleXSpan(2.0f), 49, 51,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变

		// 设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
		mSpannableString.setSpan(new RelativeSizeSpan(0.5f), 8, 10,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 0.5f表示默认字体大小的一半
		mSpannableString.setSpan(new RelativeSizeSpan(2.0f), 10, 12,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 2.0f表示默认字体大小的两倍

		// 设置字体前景色
		mSpannableString.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12,
				15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置前景色为洋红色

		// 设置字体背景色
		mSpannableString.setSpan(new BackgroundColorSpan(Color.CYAN), 15, 18,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置背景色为青色

		// 设置字体样式正常,粗体,斜体,粗斜体
		mSpannableString.setSpan(
				new StyleSpan(android.graphics.Typeface.NORMAL), 18, 20,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 正常
		mSpannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD),
				20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 粗体
		mSpannableString.setSpan(
				new StyleSpan(android.graphics.Typeface.ITALIC), 22, 24,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 斜体
		mSpannableString.setSpan(new StyleSpan(
				android.graphics.Typeface.BOLD_ITALIC), 24, 27,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 粗斜体

		// 设置下划线
		mSpannableString.setSpan(new UnderlineSpan(), 27, 30,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

		// 设置删除线
		mSpannableString.setSpan(new StrikethroughSpan(), 30, 33,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

		// 设置上下标
		mSpannableString.setSpan(new SubscriptSpan(), 34, 35,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 下标
		mSpannableString.setSpan(new SuperscriptSpan(), 36, 37,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 上标

		// 超级链接(需要添加setMovementMethod方法附加响应)
		mSpannableString.setSpan(new URLSpan("tel:4155551212"), 37, 39,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 电话
		mSpannableString.setSpan(new URLSpan("mailto:webmaster@google.com"),
				39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 邮件
		mSpannableString.setSpan(new URLSpan("http://www.baidu.com"), 41, 43,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 网络
		mSpannableString.setSpan(new URLSpan("sms:4155551212"), 43, 45,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 短信 使用sms:或者smsto:
		mSpannableString.setSpan(new URLSpan("mms:4155551212"), 45, 47,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 彩信 使用mms:或者mmsto:
		mSpannableString.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47,
				49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 地图

		// 设置项目符号
		// 第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
		mSpannableString.setSpan(new BulletSpan(
				android.text.style.BulletSpan.STANDARD_GAP_WIDTH, Color.GREEN),
				0, mSpannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

		// 设置图片
		Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
		drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
				drawable.getIntrinsicHeight());
		mSpannableString.setSpan(new ImageSpan(drawable), 51, 55,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

		mTextView.setText(mSpannableString);
		mTextView.setMovementMethod(LinkMovementMethod.getInstance());
	}
}
昵    称:
验证码:

相关文档:

Android控件
Android基础知识
Android组件
Android实例