当前位置:  编程技术>移动开发

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

    来源: 互联网  发布时间:2014-10-13

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

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

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

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方法中获得了标签的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的界面。

    
 
 

您可能感兴趣的文章:

  • Android 上类似IOS 的开关控件。 Android ToggleButton
  • android控件之WebView控件缩小
  • Android控件之TextView的分析探究
  • 树形控件 android_treevew
  • android下显示歌词的控件 OpenLRC
  • Android 日历控件 TimesSquare
  • Android 聊天控件 Android-Chat-Widget
  • android开发教程之switch控件使用示例
  • Android 月视图控件 MonthView
  • Android控件之EditView常用属性及应用方法
  • Android顶栏控件 AStickyHeader
  • android开发教程之自定义控件checkbox的样式示例
  • Android中让图片自适应控件的大小的方法
  • Android UI开发 View自绘控件 分享
  • Android控件系列之Shape使用方法
  • Android 布局控件之LinearLayout详细介绍
  • android自定义控件和自定义回调函数步骤示例
  • Android控件之ToggleButton的使用方法
  • android自定义按钮示例(重写imagebutton控件实现图片按钮)
  • android控件封装 自己封装的dialog控件
  • Android按钮单击事件的四种常用写法总结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • android游戏载入的activity跳转到游戏主菜单的activity具体实现
  • Android Activity切换(跳转)时出现黑屏的解决方法 分享
  • Android实现退出时关闭所有Activity的方法
  • android activity设置无标题实现全屏
  • Android显式启动与隐式启动Activity的区别介绍
  • android弹出activity设置大小的方法
  • android不同activity之间共享数据解决方法
  • android横竖屏切换时候Activity的生命周期
  • Android Activity 完全结束并退出程序的实例
  • Android Activity之间传递图片(Bitmap)的方法
  • android横竖屏切换不重启activity解决方案
  • Android实现Activity界面切换添加动画特效的方法
  • android的activity跳转到另一个activity
  • android Activity相对布局的使用方法
  • android开发之为activity增加左右手势识别示例
  • Android开发 旋转屏幕导致Activity重建解决方法
  • Android中通过view方式获取当前Activity的屏幕截图实现方法
  • Android的Activity跳转动画各种效果整理
  • Android 不同Activity间数据的传递 Bundle对象的应用
  • Android提高之Activity+Intent用法示例
  • 申请Android Map 的API Key(v2)的最新申请方式(SHA1密钥)
  • Android瀑布流实例 android_waterfall
  • Android开发需要的几点注意事项总结
  • Android系统自带样式 (android:theme)
  • android 4.0 托管进程介绍及优先级和回收机制
  • Android网络共享软件 Android Wifi Tether
  • Android访问与手机通讯相关类的介绍
  • Android 图标库 Android GraphView
  • Android及andriod无线网络Wifi开发的几点注意事项
  • 轻量级Android开发工具 Android Tools
  • Android 2.3 下StrictMode介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3