首先看一个链接文本执行流程的大概示意图
看了这个流程应该对大概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
分享到:
相关推荐
- `web`:识别并链接Web URL。 - `email`:识别并链接电子邮件地址。 - `phone`:识别并链接电话号码。 - `map`:识别并链接地图地址。 - `all`:同时识别所有类型。 设置`autoLink`后,点击链接会调用相应的...
本文将详细介绍如何使用Retrofit进行简单的GET请求,并结合TextView实现文本中的超链接识别。 ### Retrofit简介 Retrofit是由Square公司开发的一款Java和Kotlin的网络请求库,它通过注解的方式简化了HTTP接口的...
textView.setText(spannable); textView.setMovementMethod(LinkMovementMethod.getInstance()); ``` `LinkMovementMethod.getInstance()`使得TextView能识别并处理链接点击。 3. **自定义MovementMethod** ...
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { int action = event.getAction(); if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) { int ...
textView.setText(spannable); ``` 在这个例子中,我们创建了一个自定义的`ClickSpan`,覆盖了`onClick()`方法来处理点击事件,然后将其应用到文本上。这样,当用户点击链接时,就会启动一个浏览器并打开指定的URL。...
默认情况下,`TextView`会识别文本中的URL并自动将其设置为可点击的超链接,但其样式是系统默认的蓝色文字和下划线。若要自定义这些样式,我们可以采取以下方法: 1. **使用SpannableString**: 我们可以使用`...
此外,你还可以通过使用自定义的`Span`来实现HTML中的超链接点击事件,比如`Linkify`类可以帮助自动识别并链接URL,或者使用`ClickableSpan`来自定义点击行为。 总的来说,要在`TextView`中完美展示HTML格式的代码...
当`autoLink`设置为非"none"时,TextView会自动识别URL、电子邮件等,并添加点击事件。也可以使用`setMovementMethod(LinkMovementMethod.getInstance())`手动处理链接点击。 5. **自定义样式**: 可以通过`...
2. **文本样式**:支持设置字体、颜色、下划线、斜体等样式,以及使用Spannable对象进行复杂文本格式化。 3. **链接处理**:TextView可以识别并响应URL、电话号码等特殊格式的文本,实现点击跳转或触发其他操作。 ...
使用`android:autoLink`属性可以将文本中的URL、电话号码、邮箱等自动识别为链接,也可以通过`Linkify`类手动添加链接。 7. **多色文本** 通过`SpannableString`和`ForegroundColorSpan`等 Span 对象,可以创建...
对于内部超链接,`Linkify`类可以帮助我们自动识别文本中的URL并添加点击事件。同时,我们还可以自定义链接样式: ```java Linkify.addLinks(textView, Linkify.WEB_URLS); Linkify.MatchFilter matchFilter = new ...
- **描述**:设置文本中的URL链接、email、电话号码或地图地址等是否应该被识别为可点击的链接。 - **可选值**:`none`, `web`, `email`, `phone`, `map`, `all` - **示例**:设置`android:autoLink="web"`可以让...
这个功能实现起来并不复杂,主要涉及到了TextView的`movementMethod`属性和`Linkify`类的使用。 首先,让我们了解`movementMethod`属性。TextView的`movementMethod`决定了文本如何响应用户的触摸事件。默认情况下...
- `web`:仅识别URL链接。 - `email`:仅识别电子邮件地址。 - `phone`:仅识别电话号码。 - `map`:仅识别地图地址。 - `all`:识别所有类型的链接。 2. **android:autoText** - **描述**:如果设置,则...
当我们在TextView的文本中插入URL时,可以使用`android:autoLink="web"`属性,让系统自动识别并转换为可点击的超链接。但这种方法可能无法满足所有需求,例如自定义链接样式。此时,我们可以使用`SpannableString`和...
- 大量文本:对于大量文本,使用`TextView.BufferType.SPANNABLE`或`BufferType.EDITABLE`可以提高性能。 - 多语言支持:注意在不同语言环境下,TextView的宽度可能变化,需要合理布局。 8. **其他特性**: - ...
当TextView中包含HTML格式的文本时,可以使用`Html.fromHtml()`方法将其转换为Spanned对象,这样TextView就能识别并显示链接。例如: ```java TextView textView = (TextView) findViewById(R.id.detailed_question...
- `web`: 将文本中的URL识别为可点击的链接。 - `email`: 将文本中的电子邮件地址识别为可点击的链接。 - `phone`: 将文本中的电话号码识别为可点击的链接。 - `map`: 将文本中的地址信息识别为可点击的地图链接...