从零开始学Android之TextView

1:显示富文本(URL、不同大小、字体、颜色的文本)

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

:设置颜色                      :设置大号字                 :设置小号字

:斜体                 :粗体                     :等宽字体(Monospace)


:换行(行与行之间没有空行)                

:换行(行与行之间的空行)

:链接地址                          :插入图像

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

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

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

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

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

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


下面是示例

view plain print ?
  1. public class Main extends Activity {  
  2.   
  3.   
  4. "white-space:pre">    private TextView txtFirst,txtSecond;  
  5. "white-space:pre">      
  6. "white-space:pre">    @Override  
  7.    "white-space:pre">   public void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.main);  
  10.           
  11.         txtFirst=(TextView)findViewById(R.id.txtFirst);  
  12.         txtSecond=(TextView)findViewById(R.id.txtSecond);  
view plain print ?
  1.         String html="样式一 
    ";  
  2.         html+="   样式二   ";  
  3.         html+="+android.R.color.white+"'>     样式三      
    ";  
  4.         html+=" 我的博客:http://blog.csdn.net/a_mean  ";  
  5.           
  6.         CharSequence charSequence=Html.fromHtml(html);  
  7.         txtFirst.setText(charSequence);  
  8.         //该语句在设置后必加,不然没有任何效果  
  9.         txtFirst.setMovementMethod(LinkMovementMethod.getInstance());  
  10.           
  11.     }  
  12. }  



2:显示表情图像和文字

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

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


view plain print ?
  1. public class Main extends Activity {  
  2.   
  3.     private TextView txtSecond;  
  4.   
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.   
  10.         txtSecond = (TextView) findViewById(R.id.txtSecond);  
  11.   
  12.         String html = "很高兴 很得意";  
  13.         CharSequence charSequence = Html.fromHtml(html, new ImageGetter() {  
  14.   
  15.             @Override  
  16.             public Drawable getDrawable(String source) {  
  17.                 Drawable drawable = getResources().getDrawable(  
  18.                         getResourceId(source));  
  19.                 //这句话必写,不然图片是有了 不过显示的面积为0.  
  20.                 drawable.setBounds(00, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
  21.                 return drawable;  
  22.             }  
  23.         }, null);  
  24.           
  25.         txtSecond.setText(charSequence);  
  26.         txtSecond.setMovementMethod(LinkMovementMethod.getInstance());  
  27.     }  
  28.   
  29.     /** 
  30.      * 由于无法直接使用文件名来引用res/drawable中的图像资源, 我们利用反射技术 从R.drawable类中通过图像资源文件名, 
  31.      * 去获得相应的图像资源ID,实现代码如下: 
  32.      */  
  33.     public static int getResourceId(String name) {  
  34.         int id = 0;  
  35.         try {  
  36.             Field field = R.drawable.class.getField(name);  
  37.             id = Integer.parseInt(field.get(null).toString());  
  38.         } catch (Exception e) {  
  39.             e.printStackTrace();  
  40.         }  
  41.         return id;  
  42.     }  
  43. }  


3:单击链接弹出Activity

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

view plain print ?
  1. public class Main extends Activity {  
  2.   
  3.     private TextView txtSecond;  
  4.   
  5.     @Override  
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.   
  10.         txtSecond = (TextView) findViewById(R.id.txtSecond);  
  11.   
  12.         String text="单击弹出Activity";  
  13.         SpannableString spannableString =new SpannableString(text);  
  14.         //把text中的所有文本设置成ClickableSpan对象,并实现onClick方法  
  15.         spannableString.setSpan(new ClickableSpan() {  
  16.               
  17.             @Override  
  18.             public void onClick(View widget) {  
  19.                 //这里做我们自定义的动作  
  20.                 Intent intent=new Intent(Main.this,Test.class);  
  21.                 startActivity(intent);  
  22.             }  
  23.             /**解释一下这个setSpan方法,第一个参数需要设置一个ClickableSpan对象, 
  24.              * 第二个和第三个参数分别表示文本中要设置成Span的某段文本的起始位置和终止位置的下一个字符的位置 
  25.              * 最后一个参数是一个标志,分别是: 
  26.              *  Spannable.SPAN_EXCLUSIVE_INCLUSIVE 在Span前的字符不应用Span的效果,后面的字符应用 
  27.              *  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 在Span前的字符应用Span的效果,后面的不应用 
  28.              *  Spannable.SPAN_INCLUSIVE_INCLUSIVE 在Span前后的字符都应用Span的效果 
  29.              */  
  30.         }, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  31.         txtSecond.setText(spannableString);  
  32.         txtSecond.setMovementMethod(LinkMovementMethod.getInstance());  
  33.         }  
  34.     }  


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());   


你可能感兴趣的:(Android)