是文本框,但是不接收输入,只能进行显示,类似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 { @Override protected 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 { @Override protected 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() { @Override public 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() { @Override public void onClick(View widget) { // TODO Auto-generated method stub Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.163.com")); startActivity(intent); } }, 43, 62, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new ClickableSpan() { @Override public 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{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.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 { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String msg="这是一个测试,红色,蓝色,黄色,这个地方背景为黑色,字体为白色"; SpannableString ss=new SpannableString(msg); //红色字体 ss.setSpan(new CharacterStyle() { @Override public void updateDrawState(TextPaint tp) { tp.setColor(Color.RED); } }, 7, 9, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); //蓝色字体 ss.setSpan(new CharacterStyle() { @Override public void updateDrawState(TextPaint tp) { // TODO Auto-generated method stub tp.setColor(Color.BLUE); } }, 10, 12, SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); //黄色字体 ss.setSpan(new CharacterStyle() { @Override public void updateDrawState(TextPaint tp) { // TODO Auto-generated method stub tp.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() { @Override public void updateDrawState(TextPaint tp) { // TODO Auto-generated method stub tp.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 { @Override protected 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对应的图片返回出去 @Override public 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); //设置图片大小,默认都是0 d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight()); return d; } if(source.equals("face2.png")){ Drawable d=getResources().getDrawable(R.drawable.face2); //设置图片大小,默认都是0 d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight()); return d; } if(source.equals("face3.png")){ Drawable d=getResources().getDrawable(R.drawable.face3); //设置图片大小,默认都是0 d.setBounds(0, 0, d.getIntrinsicWidth(),d.getIntrinsicHeight()); return d; } return null; */ } },null); txt.setText(s); } }
源码下载请点这里: