`
daibalusu
  • 浏览: 343764 次
文章分类
社区版块
存档分类
最新评论

在TextView控件中单击链接弹出Activity

 
阅读更多

Android开发技巧:在TextView控件中单击链接弹出Activity

介绍了<a>标签以及TextView自动识别的特殊文本(网址、电话号、Email等),这些都可以通过单击来触发不同的动作。虽然这些单击动作已经可以满足大多数需要了,但如果读者想在单击链接时执行任意自定义的动作,那么本节的内容非看不可。

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

text.setSpan(new URLSpan(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
public void onClick(View widget) {
Uri uri = Uri.parse(getURL());
Context context = widget.getContext();
Intent intent = new Intent(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方法。

package mobile.android.ch05.link.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.view.View;
import android.widget.TextView;

public class Main extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView textView1 = (TextView) findViewById(R.id.textview1);
TextView textView2 = (TextView) findViewById(R.id.textview2);

String text1 = "显示Activity1";
String text2 = "显示Activity2";
// 将文本转换成SpannableString对象
SpannableString spannableString1 = new SpannableString(text1);
SpannableString spannableString2 = new SpannableString(text2);
// 将text1中的所有文本设置成ClickableSpan对象,并实现了onClick方法
spannableString1.setSpan(new ClickableSpan()
{
// 在onClick方法中可以编写单击链接时要执行的动作
@Override
public void onClick(View widget)
{
Intent intent = new Intent(Main.this, Activity1.class);
// 显示Activity1
startActivity(intent);
}
}, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 将text2中的所有文本设置成ClickableSpan对象,并实现了onClick方法
spannableString2.setSpan(new ClickableSpan()
{
// 在onClick方法中可以编写单击链接时要执行的动作
@Override
public void onClick(View widget)
{
Intent intent = new Intent(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的界面。

分享到:
评论

相关推荐

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

    在5.2.1节和5.2.2节介绍了标签以及TextView自动识别的特殊文本(网址、电话号、Email等),这些都可以通过单击来触发不同的动作。虽然这些单击动作已经可以满足大多数需要了,但如果读者想在单击链接时执行任意...

    Android控件之TextView的分析探究

    在android中,文本控件主要包括TextView控件和EditView... 您可能感兴趣的文章:Android控件系列之TextView使用介绍Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)Android AutoCompleteText

    Android编程开发之TextView单击链接弹出Activity的方法

    主要介绍了Android编程开发之TextView单击链接弹出Activity的方法,涉及Android中TextView控件的相关操作技巧,需要的朋友可以参考下

    老罗android视频开发源码和ppt经典

    6.3 TextView单击链接弹出Activity 6.4 TextView实现跑马灯效果 6.5 EditText输入表情图像 6.6 EditText中输入特定的字符 6.7 AutoCompleteTextView完成输入 6.8 Button按钮的焦点变化 6.9 Button图文混排的按钮 ...

    Android实验02.doc

    单击activity_main.xml标签,进入代码界面,将其中所有 代码删除。 单击Graphical Layout标签,单击Layouts导航条,从中选择LinearLayout(vertical)组件图标,拖曳至 右边。如图2-2。 图2-2 (5) 添加控件 将Form ...

    星座说明书

    要选择其他的星座时,可单击文本框右边的那个倒三角,可以弹出一个下拉菜单列表框,然后从中选择你需要查询的星座。最后,单击按钮确认,进行查询,进入下一个Activity界面。 3.2.2程序 //进行星座的选择,然后进行...

    Android基础知识详解

    用Intent启动Activity,并在Activity之间传递数据 106 调用其他应用程序中的Activity(打电话、浏览网页、发Email等) 109 接收和发送广播 113 接收系统广播 113 在自己的应用程序中发送广播 117 Android服务 118 系统...

    google android sdk开发范例大全 第二版 PDF 光盘代码

     4.26 离开与关闭程序的弹出窗口   4.27 隐藏式抽屉   4.28 手机桌面上的小玩意   4.29 手机图片搜索 .管.理. 器   4.30 实时配置桌面上的AppWidget UI Layout  第5章 交互式通信服务与手机...

    Google Android SDK开发范例大全(第3版)part2

     4.26 离开与关闭程序的弹出窗口  4.27 隐藏式抽屉  4.28 手机桌面上的小玩意  4.29 手机图片搜索管理器  4.30 实时配置桌面上的AppWidget UI Layout  4.31 识别输入装置ID与InputDevice装置  4.32 ...

    《Google Android SDK开发范例大全(第3版)》.pdf

    4.26 离开与关闭程序的弹出窗口 149 4.27 隐藏式抽屉 151 4.28 手机桌面上的小玩意 155 4.29 手机图片搜索管理器 158 4.30 实时配置桌面上的appwidget ui layout 163 4.31 识别输入装置id与input...

    Google Android SDK开发范例大全(第3版) 1/5

    4.26 离开与关闭程序的弹出窗口 4.27 隐藏式抽屉 4.28 手机桌面上的小玩意 4.29 手机图片搜索管理器 4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 ...

    Google Android SDK开发范例大全(第3版) 4/5

    4.26 离开与关闭程序的弹出窗口 4.27 隐藏式抽屉 4.28 手机桌面上的小玩意 4.29 手机图片搜索管理器 4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 ...

    Google Android SDK开发范例大全(第3版) 3/5

    4.26 离开与关闭程序的弹出窗口 4.27 隐藏式抽屉 4.28 手机桌面上的小玩意 4.29 手机图片搜索管理器 4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 ...

    Google Android SDK开发范例大全(第3版) 5/5

    4.26 离开与关闭程序的弹出窗口 4.27 隐藏式抽屉 4.28 手机桌面上的小玩意 4.29 手机图片搜索管理器 4.30 实时配置桌面上的AppWidget UI Layout 4.31 识别输入装置ID与InputDevice装置 4.32 选取文字的聪明文字联想 ...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--任务循环之只在Activity显示时执行 |--修改文件的最后修改时间 |--偏好设置(回显) |--内存优化之各种方法 |--内容提供者之短信的序列化对象读写 |--内容提供者之短信的获取与写入 |--内容提供者之联系人读写与...

    LCRapidDevelop-master

    # RapidDevelop-Android快速开发框架 - 框架持续更新中 - 这个框架是从平时项目里用的比较多的框架里整合而来 - 对本项目感兴趣的可以一起研究喜欢的朋友欢迎star - 同时也欢迎大家的宝贵意见issues... &lt;TextView ...

Global site tag (gtag.js) - Google Analytics