Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)

天蝎652

天蝎652

2016-02-19 10:34

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作),希望大家看完后能赶快学习起来。
在5.2.1节和5.2.2节介绍了a标签以及TextView自动识别的特殊文本(网址、电话号、Email等),这些都可以通过单击来触发不同的动作。虽然这些单击动作已经可以满足大多数需要了,但如果读者想在单击链接时执行任意自定义的动作,那么本节的内容非看不可。

现在让我们使用5.2.1节介绍的方法重新查看Html.java文件的内容,随便找一个处理Html标签的方法,例
如,endA方法。该方法用于处理/a标签。我们会发现在该方法中如下的语句。

text.setSpan(newURLSpan(h.mHref),where,len,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
其中text是SpannableStringBuilder对象,该对象即可以修改文本内容,又可以将某段文本设置成一个Span,在Android中,Span表示一段文本的效果,例如,链接形式、图像、带背景色的文本等。

上面代码中使用setSpan方法将某个区间(由where和len指定的区间)的文本设置成URLSpan效果,也就是链接显示效果。其中URLSpan表示将文本设置成链接效果,该类是ClickableSpan的子类,在android.text.style包中可以找到URLSpan和ClickableSpan类。实际上,所有的Span类都在android.text.style包中。
我们再按着查看Html.java文件内容的方法查看URLSpan.java文件的内容,会看到一个onClick方法,代码如下:
代码如下:

//覆盖ClickableSpan类中的onClick方法,onClick方法在ClickableSpan类中是抽象方法
@Override
publicvoidonClick(Viewwidget){
Uriuri=Uri.parse(getURL());
Contextcontext=widget.getContext();
Intentintent=newIntent(Intent.ACTION_VIEW,uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID,context.getPackageName());
context.startActivity(intent);
}

在onClick方法中获得了a标签的href属性设置的URL,并调用相应的Activity来显示网页。

从onClick方法的源代码以及ClickableSpan类的名字可以得出一个结论。在5.2.1节和5.2.2节介绍的像电话、Email、网址、链接都是在ClickableSpan类的onClick方法中通过Action调用相应的Activity来显示不同的内容的。那么我们也可以采用类似的方法,也就是自己来实现onClick方法,这样就可以达到自定义单击动作的目的了。

说做就做,先准备两个TextView控件。在本例中我们使用SpannableString对象来设置Span,SpannableString和SpannableStringBuilder的区别是SpannableString不允许修改文本,只允许设置Span,而SpannableStringBuilder即允许修改文本,也允许设置Span。

下面的代码采用了隐式创建ClickableSpan对象实例的方法来设置Span,并在其中覆盖了onClick方法。
代码如下:

packagemobile.android.ch05.link.activity;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.text.SpannableString;
importandroid.text.Spanned;
importandroid.text.method.LinkMovementMethod;
importandroid.text.style.ClickableSpan;
importandroid.view.View;
importandroid.widget.TextView;
publicclassMainextendsActivity
{
@Override
publicvoidonCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextViewtextView1=(TextView)findViewById(R.id.textview1);
TextViewtextView2=(TextView)findViewById(R.id.textview2);
Stringtext1="显示Activity1";
Stringtext2="显示Activity2";
//将文本转换成SpannableString对象
SpannableStringspannableString1=newSpannableString(text1);
SpannableStringspannableString2=newSpannableString(text2);
//将text1中的所有文本设置成ClickableSpan对象,并实现了onClick方法
spannableString1.setSpan(newClickableSpan()
{
//在onClick方法中可以编写单击链接时要执行的动作
@Override
publicvoidonClick(Viewwidget)
{
Intentintent=newIntent(Main.this,Activity1.class);
//显示Activity1
startActivity(intent);
}
},0,text1.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//将text2中的所有文本设置成ClickableSpan对象,并实现了onClick方法
spannableString2.setSpan(newClickableSpan()
{
//在onClick方法中可以编写单击链接时要执行的动作
@Override
publicvoidonClick(Viewwidget)
{
Intentintent=newIntent(Main.this,Activity2.class);
//显示Activity2
startActivity(intent);
}
},0,text1.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//使用SpannableString对象设置两个TextView控件的内容
textView1.setText(spannableString1);
textView2.setText(spannableString2);
//在单击链接时凡是有要执行的动作,都必须设置MovementMethod对象
textView1.setMovementMethod(LinkMovementMethod.getInstance());
textView2.setMovementMethod(LinkMovementMethod.getInstance());
}
}

现在我们来看一下setSpan方法,该方法有4个参数。第一个参数需要设置一个ClicableSpan对象,第二个和第三个参数分别表示文本中要设置成Span的某段文本的起始位置和终止位置的下一个字符的位置,也就是start和end。最后一个参数是一个标志。在本例中设为Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,该标志在TextView控件中意义不大,但在EditText控件中表示在当前Span效果的前后输入字符时并不应用Span的效果。还可以设置如下几个类似的值。
1.Spanned.SPAN_EXCLUSIVE_INCLUSIVE:在Span前面输入的字符不应用Span的效果,在后面输入的字符应用Span效果。
2.Spanned.SPAN_INCLUSIVE_EXCLUSIVE:在Span前面输入的字符应用Span的效果,在后面输入的字符不应用Span效果。
3.Spanned.SPAN_INCLUSIVE_INCLUSIVE:在Span前后输入的字符都应用Span的效果。
本例的显示效果如图5.5所示。单击屏幕上的两个链接后,就会分别显示Activity1和Activity2的界面。
展开更多 50%)
分享

猜你喜欢

Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)

编程语言 网络编程
Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)

解析在Android中为TextView增加自定义HTML标签的实现方法

编程语言 网络编程
解析在Android中为TextView增加自定义HTML标签的实现方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC中自定义CRichEditCtrl控件

编程语言 网络编程
VC中自定义CRichEditCtrl控件

JSP 自定义标签

Web开发
JSP 自定义标签

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

自定义 CRichEditCtrl 控件

C语言教程 C语言函数
自定义 CRichEditCtrl 控件

JSP的自定义标签

Web开发
JSP的自定义标签

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

javascript里的条件判断

javascript里的条件判断

Windows 2000安全策略的使用技巧

Windows 2000安全策略的使用技巧
下拉加载更多内容 ↓