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 {

@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);
}



}



源码下载请点这里:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值