SpannableString实现TextView的链接效果

SpannableString实现TextView的链接效果

一、简介

TextView使用SpannableString设置复合文本
TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式、事件方面的设置。Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能:

1、BackgroundColorSpan 背景色
2、ClickableSpan 文本可点击,有点击事件
3、ForegroundColorSpan 文本颜色(前景色)
4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
5、MetricAffectingSpan 父类,一般不用
6、RasterizerSpan 光栅效果
7、StrikethroughSpan 删除线(中划线)
8、SuggestionSpan 相当于占位符
9、UnderlineSpan 下划线
10、AbsoluteSizeSpan 绝对大小(文本字体)
11、DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
12、ImageSpan 图片
13、RelativeSizeSpan 相对大小(文本字体)
14、ReplacementSpan 父类,一般不用
15、ScaleXSpan 基于x轴缩放
16、StyleSpan 字体样式:粗体、斜体等
17、SubscriptSpan 下标(数学公式会用到)
18、SuperscriptSpan 上标(数学公式会用到)
19、TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
20、TypefaceSpan 文本字体
21、URLSpan 文本超链接

SpannableString的类架构(部分)

二、方法

1)用SpannableString给TextView对象设置link点击事件方法

第一步:设置string内容

String text="点击我打开activity";

第二步:为string内容添加各种属性,
在这里是拥有SpannableString的ClickableSpan属性

SpannableString spannableString=new SpannableString(text);

spannableString.setSpan(new ClickableSpan() {中间省略Onclic方法}, 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

第三步:在TextView中添加上面设置好的文本内容

tv_spannableString.setText(spannableString);

第四步:设置鼠标点击响应事件

这一步在html方法中必须要,现在没有指定autoLink,感觉也是必须要,没这句话编译出错

spannableString.setSpan(new ClickableSpan() {中间省略Onclic方法}, 3, text.length(),

tv_spannableString.setMovementMethod(LinkMovementMethod.getInstance());

2)SpannableString为控件设置各种属性的方法

1、将string类型转化为SpannableString类型对象

SpannableString spannableString=new SpannableString(text);

2、对SpannableString对象执行setSpan方法

spannableString.setSpan(new ClickableSpan() {中间省略Onclic方法}, 3, text.length(), }, 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

说明,设置点击事件是使用的ClickableSpan() ,如果想要设置其他效果就用其它的好了,

就是最上面列举的那么多

三、代码实例

效果图

点击之后出现

代码:

fry.ActivityDemo3

 1 package fry;
 2
 3 import java.lang.reflect.Field;
 4
 5 import com.example.textViewDemo1.R;
 6 import com.example.textViewDemo1.R.id;
 7
 8 import android.app.Activity;
 9 import android.content.Intent;
10 import android.graphics.drawable.Drawable;
11 import android.os.Bundle;
12 import android.text.Html;
13 import android.text.Html.ImageGetter;
14 import android.text.SpannableString;
15 import android.text.Spanned;
16 import android.text.method.LinkMovementMethod;
17 import android.text.style.ClickableSpan;
18 import android.view.View;
19 import android.widget.TextView;
20
21 public class ActivityDemo3 extends Activity{
22     private TextView tv_spannableString;
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         // TODO Auto-generated method stub
26         super.onCreate(savedInstanceState);
27         setContentView(R.layout.activity03);
28         setTitle("TextViewDemo3");
29         tv_spannableString=(TextView) findViewById(R.id.tv_spannableString);
30         /*
31          * 用SpannableString给TextView对象设置link点击事件方法
32          * 第一步:设置string内容
33          */
34         String text="点击我打开activity";
35         /*
36          * 第二步:为string内容添加各种属性,
37          * 在这里是拥有SpannableString的ClickableSpan属性
38          */
39
40         /*
41          * SpannableString为控件设置各种属性的方法
42          * 1、将string类型转化为SpannableString类型对象
43          * 2、对SpannableString对象执行setSpan方法
44          */
45         SpannableString spannableString=new SpannableString(text);
46         spannableString.setSpan(new ClickableSpan() {
47
48             @Override
49             public void onClick(View arg0) {
50                 // TODO Auto-generated method stub
51                 Intent intent=new Intent(ActivityDemo3.this,ActivityDemo2.class);
52                 startActivity(intent);
53             }
54         }, 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
55         /*
56          * Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
57          * exclusive是 独有的 意思
58          * 这个属性即是效果独有,不影响前后
59          */
60
61         /*
62          * 第三步:在TextView中添加上面设置好的文本内容
63          */
64         tv_spannableString.setText(spannableString);
65         /*
66          * 第四步:设置鼠标点击响应事件
67          * 这一步在html方法中必须要,现在没有指定autoLink,感觉也是必须要
68          * 没这句话编译出错
69          */
70         tv_spannableString.setMovementMethod(LinkMovementMethod.getInstance());
71     }
72 }

/textViewDemo1/res/layout/activity03.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     <TextView
 7         android:id="@+id/tv_spannableString"
 8         android:layout_width="match_parent"
 9         android:layout_height="wrap_content"
10         />
11
12 </LinearLayout>
时间: 2024-10-06 14:12:46

SpannableString实现TextView的链接效果的相关文章

css3创建导航链接效果集锦滑动文字变颜色

分享一些常用和创意的导航链接效果.例子中鼠标悬停使用伪元素和动画来创建一个微妙和有现代节奏感的链接效果. 注意,伪元素并不是在所有的浏览器都能兼容.使用Chrome和Firefox浏览器观看,效果最佳. 在大多数情况下,创建一个简单的链接导航如下html: Beleaguer Lassitude Murmurous Palimpsest Assemblage 但对于一些特殊的效果,我们可能会在伪元素中使用重复的链接文字: Desultory Sumptuous Scintilla Propinq

Android TextView跑马灯效果

TextView跑马灯简单效果 <!--简单示例--> <TextView android:text="@string/longWord" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1" android:ellipsize="marquee&quo

TextView drawablePadding没有效果

1.当TextView 设置宽度设置为match_parent的时候 TextView drawablePadding没有效果 ,字设置了center位置,但是和左边的图片离开很远 2.当TextView 设置的宽度为wrap_parent的时候,extView drawablePadding有效果 解决:自定义TextView package com.charlie.chpro.customview; import android.content.Context; import android

android在Gridview实现Textview跑马灯效果

默认是下面的属性添加TextView中: android:ellipsize="marquee" android:focusableInTouchMode="true" android:gravity="center" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLi

TextView淡入淡出效果

经常看到有些应用里面TextView会有淡入淡出效果,给人一种眼前一亮的感觉,如下图: 这篇文章简单介绍下它的代码实现. 首先,可以先将此动画分解成两部分,即淡入和淡出,淡入的时候,从底部向中心点移动,移动的过程中,文字越变越清晰: 淡出的时候,从中心点向顶部移动,移动过程中,文字越变越模糊.这其中涉及到两个属性:translationY(控件在纵向上的移动距离).alpha(控件的不透明度) 本章将利用属性动画实现其效果. 首先,看淡出的实现: private ObjectAnimator m

控制a标签的链接效果+控制input复选框+选框文字

1.a:link{color:black;} 控制链接效果2.a:visited{color:red;} 控制鼠标点下时的效果3.a:hover{color:yellow;} 控制鼠标滑过的效果4.a;active{color:black;} 控制链接点过之后的效果5.cursor:pointer;     鼠标变手型 6.让选中的复选框变文字变红色让input的框自动获取焦点里面的文字变红色 input:focus{color:red;}input[type="checkbox"]:

Android:通过SpannableString为TextView设置丰富的显示效果

在使用TextView的过程中,有时候会需要将一串文本中的部分文字做特别的显示效果处理,比如加粗.改变颜色.加着重标识.超链接等等,我们可以通过多个TextView拼凑来实现,但如果需要特殊处理的内容在整个文本的中间,用多个TextView拼凑实在是太麻烦.太Low了,Android提供的SpannableString类能够很好地解决这个问题,SpannableString结合下面各种以Span结尾的类可以做出丰富多样的显示效果. 本文结合平时工作情况,写了一个SpannableUtils工具类

Android—— TextView文字链接4中方法

转自:http://ghostfromheaven.iteye.com/blog/752181 Android 的实现TextView中文字链接的方式有很多种. 总结起来大概有4种: 1.当文字中出现URL.E-mail.电话号码等的时候,可以将TextView的android:autoLink属性设置为相应的的值,如果是所有的类型都出来就是android:autoLink="all".当然也可以在java代码里做,textView01.setAutoLinkMask(Linkify.

实现textview竖排文字效果

文字效果 /** * @描述 * @作者 tll * @时间 2016/10/20 */public class VerticalTextView extends LinearLayout { private LinearLayout llLayout; private TextView textView; public VerticalTextView(Context context, AttributeSet attrs) { super(context, attrs); this.cont