现在让我们使用5.2.1节介绍的方法重新查看@R_502_6832@.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包中。
我们再按着查看@R_502_6832@.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);
}
},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);
}
},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的界面。
总结
以上是内存溢出为你收集整理的Android开发技巧之在a标签或TextView控件中单击链接d出Activity(自定义动作)全部内容,希望文章能够帮你解决Android开发技巧之在a标签或TextView控件中单击链接d出Activity(自定义动作)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)