Android从零开始(4)

Android从零开始(四)知识点:TextView是文本框,但是不接收输入,只能进行显示,类似Swing的lable控件,但是Tex

Android从零开始(四)
知识点:TextView
        是文本框,但是不接收输入,只能进行显示,类似Swing的lable控件,但是TextView比lable的功能更多:

        1.TextView的内容会自动根据其内容设定动作,比如电话号码的话,当触摸的时候进入拨号程序,当是网站的时候自动打开浏览器

        2.为TextView的内容设置自定义动作(比如跳转到另一个Activity)

        3.为TextView的内容更改背景色和字体颜色

        4.TextView的内容包含<a>标签和<img>标签,来实现显示图片和超链接动作


       实现功能一的核心代码:
      

package com.zjyb.demo9;import android.app.Activity;import android.os.Bundle;import android.text.method.LinkMovementMethod;import android.text.util.Linkify;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//默认的匹配动作,通常基本不使用,因为这种匹配无法控制String msg="办证:133738323";//findViewById是根据id查找控件TextView txt=(TextView)findViewById(R.id.txt);txt.setText(msg);txt.setAutoLinkMask(Linkify.ALL);//如果要生效,那么加入以下代码txt.setMovementMethod(LinkMovementMethod.getInstance());}}



           实现功能二的核心代码:
          
package com.zjyb.demo10;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.Spannable;import android.text.SpannableString;import android.text.method.LinkMovementMethod;import android.text.style.ClickableSpan;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String msg="你好,这里是11086,如果需要咨询,请拨打:1234567\n";msg=msg+"如需帮助,可以访问网站:http://www.163.com\n";msg=msg+"当然,如果没有问题,触摸进入下一个页面";TextView txt=(TextView)findViewById(R.id.txt);//文本内容中有些关键文本会充当一个链接来执行某个操作//SpannableString表示一个可修改的字符串,所谓的修改包括动作,颜色等所有的东西SpannableString ss=new SpannableString(msg);//拨打电话ss.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Intent callIntent=new Intent(Intent.ACTION_DIAL, Uri.parse("tel:1234567"));startActivity(callIntent);}}, 23, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);//setSpan是指定某段文本的特性//参数1,是告诉Android这段文本的特性是什么what//在这里我们指定的是ClickableSpan表示点击动作的特性//参数2和参数3是确定哪段文本//参数4是个flag,表示这个特性是否还影响其他的部分//通常我们设置为 Spannable.SPAN_EXCLUSIVE_EXCLUSIVE//表示不影响其他部分//设置网站ss.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {// TODO Auto-generated method stubIntent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.163.com"));startActivity(intent);}}, 43, 62, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);ss.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {// TODO Auto-generated method stub//Intent表示意图,在Android中几乎所有的动作都通过意图来实现//意图你可以理解为一种桥梁,你把你想干的事告诉它,然后它会去实现Intent intent=new Intent(MainActivity.this,NewActivity.class);startActivity(intent);}}, 72, 74, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);txt.setMovementMethod(LinkMovementMethod.getInstance());txt.setText(ss);}}


   其中新的activity的代码:
  
package com.zjyb.demo10;import android.app.Activity;import android.os.Bundle;public class NewActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.newactivity_layout);}}



          实现功能三的核心代码:
                
package com.zjyb.demo11;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.text.SpannableString;import android.text.TextPaint;import android.text.style.BackgroundColorSpan;import android.text.style.CharacterStyle;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String msg="这是一个测试,红色,蓝色,黄色,这个地方背景为黑色,字体为白色";SpannableString ss=new SpannableString(msg);//红色字体ss.setSpan(new CharacterStyle() {@Overridepublic void updateDrawState(TextPaint tp) {tp.setColor(Color.RED);}}, 7, 9, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);//蓝色字体ss.setSpan(new CharacterStyle() {@Overridepublic void updateDrawState(TextPaint tp) {// TODO Auto-generated method stubtp.setColor(Color.BLUE);}}, 10, 12, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);//黄色字体ss.setSpan(new CharacterStyle() {@Overridepublic void updateDrawState(TextPaint tp) {// TODO Auto-generated method stubtp.setColor(Color.YELLOW);}}, 13, 15, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);//绿色背景ss.setSpan(new BackgroundColorSpan(Color.GREEN), 0, 6, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);//黑色背景+白色字体ss.setSpan(new CharacterStyle() {@Overridepublic void updateDrawState(TextPaint tp) {// TODO Auto-generated method stubtp.setColor(Color.WHITE);tp.bgColor=Color.BLACK;}},16 , msg.length(),SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE );TextView txt=(TextView)findViewById(R.id.txt);txt.setText(ss);}}

    

               实现功能四的核心代码(注意发射方法的使用):
           
package com.zjtb.demo12;import android.app.Activity;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.text.Html;import android.text.Html.ImageGetter;import android.text.Spanned;import android.util.Log;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView txt=(TextView)findViewById(R.id.txt);//先演示<a>标签//在android的textView中支持部分html标签//比较常见的有<b>,<i>,<br>,<p>,<font>,<a>,<img>/*String msg="<a href='http://www.163.com'>点击前往网易</a>";Spanned s= Html.fromHtml(msg);txt.setMovementMethod(LinkMovementMethod.getInstance());txt.setText(s);*///然后演示<img>,在textView中如果要贴图的话,那么img是必须的String msg="表情1<img src='face1.png'/><br>";msg=msg+"表情2<img src='face2.png'/><br>";msg=msg+"表情3<img src='face3.png'/><br>";msg=msg+"表情4<img src='face4.png'/><br>";msg=msg+"表情5<img src='face5.png'/><br>";msg=msg+"表情6<img src='face6.png'/><br>";msg=msg+"表情7<img src='face7.png'/><br>";msg=msg+"表情8<img src='face8.png'/><br>";msg=msg+"表情9<img src='face9.png'/><br>";msg=msg+"美女<img src='c.jpg'>";//android中img的src并非图片地址,而仅仅只是个标记Spanned s= Html.fromHtml(msg,new ImageGetter() {//ImageGetter会去扫描内容,发现img标签的时候触发getDrawable方法//我们就在getDrawable方法中将img对应的图片返回出去@Overridepublic Drawable getDrawable(String source) {//下面是程序员普遍使用的方法int index=source.indexOf(".");String name=source;if(index!=-1){name=source.substring(0,index);}Drawable d=null;try{Class cls=R.drawable.class;d=getResources().getDrawable(cls.getField(name).getInt(null));d.setBounds(0, 0, d.getIntrinsicWidth()/2, d.getIntrinsicHeight()/2);}catch(Exception e){Log.e("Tag", e.toString());StackTraceElement[] ste= e.getStackTrace();for(StackTraceElement et :ste){Log.e("Tag", et.toString());}}return d;/*//下面是大家普遍使用的方法if(source.equals("face1.png")){Drawable d=getResources().getDrawable(R.drawable.face1);//设置图片大小,默认都是0d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());return d;}if(source.equals("face2.png")){Drawable d=getResources().getDrawable(R.drawable.face2);//设置图片大小,默认都是0d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());return d;}if(source.equals("face3.png")){Drawable d=getResources().getDrawable(R.drawable.face3);//设置图片大小,默认都是0d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight());return d;}return null;*/}},null);txt.setText(s);}}



      源码下载请点这里: