`
zhouxiaoli521
  • 浏览: 561591 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android TextView url识别,Spannable的使用

 
阅读更多

首先看一个链接文本执行流程的大概示意图 


 

看了这个流程应该对大概URL, Email等的链接实现有所了解了,所以直接看代码把 

 

TextView view1 = (TextView) findViewById( R.id.view1 );
TextView view2 = (TextView) findViewById( R.id.view2 );
TextView view3 = (TextView) findViewById( R.id.view3 );
TextView view4 = (TextView) findViewById( R.id.view4 );
TextView view5 = (TextView) findViewById( R.id.view5 );
TextView view6 = (TextView) findViewById( R.id.view6 );

SpannableString text1 = new SpannableString("red");
text1.setSpan(new ForegroundColorSpan(Color.RED), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view1.setText( text1 );

SpannableString text2 = new SpannableString("green");
text2.setSpan(new BackgroundColorSpan(Color.GREEN), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view2.setText( text2 );

SpannableString text3 = new SpannableString("i am bold");
text3.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view3.setText( text3 );

SpannableString text4 = new SpannableString("underline");
text4.setSpan(new UnderlineSpan(), 0, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view4.setText( text4 );

SpannableString text5 = new SpannableString("delete line");
text5.setSpan(new StrikethroughSpan(), 7, 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view5.setText( text5 );

SpannableString text6 = new SpannableString("make a call");
text6.setSpan(new URLSpan("tel:123456789"), 7, 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view6.setText( text6 );
view6.setMovementMethod(LinkMovementMethod.getInstance());

// 还有ImageSpan等

 

 

 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
    <TextView
	android:id="@+id/view1"
	android:layout_width="wrap_content"
	android:layout_height="50sp"
	android:gravity="center"
	/>
	<TextView
	android:id="@+id/view2"
	android:layout_width="wrap_content"
	android:layout_height="50sp"
	android:gravity="center"
	/>
	<TextView
	android:id="@+id/view3"
	android:layout_width="wrap_content"
	android:layout_height="50sp"
	android:gravity="center"
	/>
	<TextView
	android:id="@+id/view4"
	android:layout_width="wrap_content"
	android:layout_height="50sp"
	android:gravity="center"
	/>
	<TextView
	android:id="@+id/view5"
	android:layout_width="wrap_content"
	android:layout_height="50sp"
	android:gravity="center"
	/>
	<TextView
	android:id="@+id/view6"
	android:layout_width="wrap_content"
	android:layout_height="50sp"
	android:gravity="center"
	/>
</LinearLayout>
 

 默认的链接在点击时,只会跳转到响应的View,如点击URL时,打开浏览器,点击电话号码时,打开拨号界面。 如果我们要在点击某连接时,跳转到某个Activity呢。 


URLSpan继承自ClickableSpan,所以我们的出发点也是这个类,然后重写其中的onClick 

 

public class IntentSpan extends ClickableSpan implements ParcelableSpan {
	private Intent mIntent;
	
	public IntentSpan(Intent toActivity) {
		mIntent = toActivity;
	}
	
	@Override
	public void onClick(View sourceView) {
		Context context = sourceView.getContext();
		context.startActivity( mIntent );
	}
	
	@Override
	public int getSpanTypeId() {
		return 100;
	}
	
	@Override
	public int describeContents() {
		return 0;
	}
	
	@Override
	public void writeToParcel(Parcel dest, int flag) {
		// don't write to parcel
	}
	
	public Intent getIntent() {
		return mIntent;
	}
}
 

 使用的话和URLSpan差不多 

 

SpannableString text6 = new SpannableString("make a call");
Intent intent = new Intent(context, SomActivity.class);
text6.setSpan(new IntentSpan(intent), 7, 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
view6.setText( text6 );
view6.setMovementMethod(LinkMovementMethod.getInstance());

 http://yuanzhifei89.iteye.com/blog/983944

分享到:
评论

相关推荐

    TextView的xml属性(Android)

    `android:autoLink`属性允许`TextView`自动识别并链接化特定类型的文本,如网址、电子邮件地址、电话号码和地图地址。通过设置不同的常量,可以开启不同的链接类型。例如: - `none`:默认值,不进行任何链接。 -...

    Android TextView中文字设置超链接、颜色、字体

    当我们在TextView的文本中插入URL时,可以使用`android:autoLink="web"`属性,让系统自动识别并转换为可点击的超链接。但这种方法可能无法满足所有需求,例如自定义链接样式。此时,我们可以使用`SpannableString`和...

    TextView实现超链接的四种方式

    这里的`android:autoLink="web"`表示自动识别并链接URL。 ### 2. 使用`Linkify` Linkify类是Android提供的一个工具类,可以方便地将普通文本转换为链接。首先,我们需要导入`android.text.util.Linkify`库,然后在...

    TextView超链接自定义样式

    默认情况下,`TextView`会识别文本中的URL并自动将其设置为可点击的超链接,但其样式是系统默认的蓝色文字和下划线。若要自定义这些样式,我们可以采取以下方法: 1. **使用SpannableString**: 我们可以使用`...

    AndroidTextView属性详解[归类].pdf

    1. `android:autoLink`:此属性允许TextView自动识别文本中的URL、电子邮件、电话号码或地图地址,并将其转换为可点击的链接。可选值包括`none`、`web`、`email`、`phone`、`map`和`all`,分别对应不同的链接类型。 ...

    textview网页链接

    在Android开发中,TextView是用于显示单行或多行文本的常用组件。当涉及到在TextView中嵌入可点击的网页链接时,开发者需要了解如何在文本中设置超链接,并且处理用户的点击事件,以便用户能够方便地打开网页。下面...

    android_TextView属性详解

    ### android_TextView属性详解 #### 一、概述 在Android开发中,`TextView`是非常重要的UI组件之一,用于展示文本信息。为了满足不同场景下的需求,`TextView`提供了丰富的属性来控制其外观和行为。本文将详细介绍...

    textview完美展示html格式代码

    在Android开发中,`TextView` 是一个非常常用的控件,用于显示单行或多行文本。然而,当需要在`TextView`中展示HTML格式的内容时,就需要进行一些特殊处理,以便让`TextView`能够理解并正确渲染HTML标签。本文将深入...

    Android使用内置WebView打开TextView超链接的实现方法

    在Android开发中,有时我们需要在应用内部处理TextView中的超链接,而不是让它们默认跳转到外部浏览器。本文将详细介绍如何使用内置的WebView组件来实现这一功能。首先,我们需要理解两个关键概念:`WebView`和`...

    android_api_textview

    ### Android API TextView详解 在Android开发中,`TextView`是一个非常重要的基础组件,它用于在界面上展示文本信息。为了更好地理解和使用`TextView`,本文将深入探讨其API特性及用法。 #### 1. `TextView`的继承...

    android TextView属性的详细介绍 分享

    1. `android:autoLink`:这个属性允许自动识别文本中的URL、电子邮件、电话号码或地图地址,并将其转换为可点击的链接。可选值包括`none`(关闭自动链接)、`web`(链接网页)、`email`(链接电子邮件地址)、`phone...

    在TextView中添加超链接

    在Android开发中,TextView是用于显示单行或多行文本的视图组件,它在用户界面设计中扮演着重要角色。当需要在TextView中插入可点击的超链接时,有多种方法可以实现这一功能。以下是对这些方法的详细介绍: 1. **...

    Android2.2 TextView和API中文文档

    - 大量文本:对于大量文本,使用`TextView.BufferType.SPANNABLE`或`BufferType.EDITABLE`可以提高性能。 - 多语言支持:注意在不同语言环境下,TextView的宽度可能变化,需要合理布局。 8. **其他特性**: - ...

    Android2.2—TextView API中文文档

    ### Android2.2—TextView API中文文档:深入解析 #### 引言 在Android开发中,`TextView`作为最常用的视图组件之一,用于展示文本信息。本文将深入解析`TextView` API,尤其是针对Android2.2版本的特性,帮助...

    Retorfit的简单使用get请求,TextView的文本超链接识别源码

    在Android开发中,Retrofit和TextView是两个非常重要的组件。Retrofit是一个强大的网络请求库,而TextView则是显示文本信息的基本控件。本文将详细介绍如何使用Retrofit进行简单的GET请求,并结合TextView实现文本中...

    textView属性

    使用`android:autoLink`属性可以将文本中的URL、电话号码、邮箱等自动识别为链接,也可以通过`Linkify`类手动添加链接。 7. **多色文本** 通过`SpannableString`和`ForegroundColorSpan`等 Span 对象,可以创建...

Global site tag (gtag.js) - Google Analytics