`

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布局文件

 
<?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());

  • 大小: 10.6 KB
  • 大小: 12.4 KB
分享到:
评论
1 楼 lenomon 2012-04-07  

相关推荐

    TextView的xml属性(Android)

    - `web`:识别并链接Web URL。 - `email`:识别并链接电子邮件地址。 - `phone`:识别并链接电话号码。 - `map`:识别并链接地图地址。 - `all`:同时识别所有类型。 设置`autoLink`后,点击链接会调用相应的...

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

    本文将详细介绍如何使用Retrofit进行简单的GET请求,并结合TextView实现文本中的超链接识别。 ### Retrofit简介 Retrofit是由Square公司开发的一款Java和Kotlin的网络请求库,它通过注解的方式简化了HTTP接口的...

    在TextView中添加超链接

    textView.setText(spannable); textView.setMovementMethod(LinkMovementMethod.getInstance()); ``` `LinkMovementMethod.getInstance()`使得TextView能识别并处理链接点击。 3. **自定义MovementMethod** ...

    TextView实现超链接的四种方式

    public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { int action = event.getAction(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int ...

    textview网页链接

    textView.setText(spannable); ``` 在这个例子中,我们创建了一个自定义的`ClickSpan`,覆盖了`onClick()`方法来处理点击事件,然后将其应用到文本上。这样,当用户点击链接时,就会启动一个浏览器并打开指定的URL。...

    TextView超链接自定义样式

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

    textview完美展示html格式代码

    此外,你还可以通过使用自定义的`Span`来实现HTML中的超链接点击事件,比如`Linkify`类可以帮助自动识别并链接URL,或者使用`ClickableSpan`来自定义点击行为。 总的来说,要在`TextView`中完美展示HTML格式的代码...

    A0207TextView的使用1

    当`autoLink`设置为非"none"时,TextView会自动识别URL、电子邮件等,并添加点击事件。也可以使用`setMovementMethod(LinkMovementMethod.getInstance())`手动处理链接点击。 5. **自定义样式**: 可以通过`...

    TextView

    2. **文本样式**:支持设置字体、颜色、下划线、斜体等样式,以及使用Spannable对象进行复杂文本格式化。 3. **链接处理**:TextView可以识别并响应URL、电话号码等特殊格式的文本,实现点击跳转或触发其他操作。 ...

    textView属性

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

    TextView自定义字体,风格,超链接等效果

    对于内部超链接,`Linkify`类可以帮助我们自动识别文本中的URL并添加点击事件。同时,我们还可以自定义链接样式: ```java Linkify.addLinks(textView, Linkify.WEB_URLS); Linkify.MatchFilter matchFilter = new ...

    android_api_textview

    - **描述**:设置文本中的URL链接、email、电话号码或地图地址等是否应该被识别为可点击的链接。 - **可选值**:`none`, `web`, `email`, `phone`, `map`, `all` - **示例**:设置`android:autoLink="web"`可以让...

    WebView跳转TextView中的超链接

    这个功能实现起来并不复杂,主要涉及到了TextView的`movementMethod`属性和`Linkify`类的使用。 首先,让我们了解`movementMethod`属性。TextView的`movementMethod`决定了文本如何响应用户的触摸事件。默认情况下...

    android_TextView属性详解

    - `web`:仅识别URL链接。 - `email`:仅识别电子邮件地址。 - `phone`:仅识别电话号码。 - `map`:仅识别地图地址。 - `all`:识别所有类型的链接。 2. **android:autoText** - **描述**:如果设置,则...

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

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

    Android2.2 TextView和API中文文档

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

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

    当TextView中包含HTML格式的文本时,可以使用`Html.fromHtml()`方法将其转换为Spanned对象,这样TextView就能识别并显示链接。例如: ```java TextView textView = (TextView) findViewById(R.id.detailed_question...

    TextView属性大全

    - `web`: 将文本中的URL识别为可点击的链接。 - `email`: 将文本中的电子邮件地址识别为可点击的链接。 - `phone`: 将文本中的电话号码识别为可点击的链接。 - `map`: 将文本中的地址信息识别为可点击的地图链接...

Global site tag (gtag.js) - Google Analytics