TextView添加链接

本文主要介绍TextView添加链接的几种可行及不可行方式,并且分析为什么不可行。 示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚 效果图如下:


一、可行方式

Java


1

2

3

4

5

6

7

8


<TextView

android:id="@+id/trineaInfo"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

trineaInfoTv = (TextView)activity.findViewById(R.id.trineaInfo);

trineaInfoTv.setMovementMethod(LinkMovementMethod.getInstance());

Spanned text = Html.fromHtml("个人主页:<a href=\"http://www.trinea.cn\"> Trinea</a>");

trineaInfoTv.setText(text);

显示链接样式,能点击,touch即点击

Java


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


<TextView

android:id="@+id/trineaInfo"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

trineaInfoTv = (TextView)activity.findViewById(R.id.trineaInfo);

Spanned text = Html.fromHtml("个人主页:<a href=\"http://www.trinea.cn\"> Trinea</a>");

trineaInfoTv.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

Uri web = Uri.parse("http://www.trinea.cn");

Intent i = new Intent(Intent.ACTION_VIEW, web);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

activity.startActivity(i);

}

});

显示链接样式,能点击。通过手动设置textView的OnClickListener完成点击响应。

Java


1

2

3

4

5

6

7


<TextView

android:id="@+id/trineaInfo"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:autoLink="all" />

trineaInfoTv = (TextView)activity.findViewById(R.id.trineaInfo);

trineaInfoTv.setText("个人主页:http://www.trinea.cn");

显示链接样式,并且能点击(只响应http://www.trinea.cn部分点击),不过不支持如下的href形式

Java


1


trineaInfoTv.setText("个人主页:<a href=\"http://www.trinea.cn\"> Trinea</a>");

二、不可行方式

Java


1

2

3

4

5

6

7

8


<TextView

android:id="@+id/trineaInfo"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:autoLink="all" />

trineaInfoTv = (TextView)activity.findViewById(R.id.trineaInfo);

Spanned text = Html.fromHtml("个人主页:<a href=\"http://www.trinea.cn\"> Trinea</a>");

trineaInfoTv.setText(text);

显示链接样式,不能点击

Java


1

2

3

4

5

6

7


<TextView

android:id="@+id/trineaInfo"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

trineaInfoTv = (TextView)activity.findViewById(R.id.trineaInfo);

Spanned text = Html.fromHtml("个人主页:<a href=\"http://www.trinea.cn\"> Trinea</a>");

trineaInfoTv.setText(text);

显示链接样式,不能点击

Java


1

2

3

4

5

6

7

8

9


<TextView

android:id="@+id/trineaInfo"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:autoLink="all" />

trineaInfoTv = (TextView)activity.findViewById(R.id.trineaInfo);

trineaInfoTv.setMovementMethod(LinkMovementMethod.getInstance());

Spanned text = Html.fromHtml("个人主页:<a href=\"http://www.trinea.cn\"> Trinea</a>");

trineaInfoTv.setText(text);

不显示链接样式,不能点击

三、通过源码分析原因
TextView.setText函数主要源代码如下:

Java


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42


if (!isSuggestionUnderLineRefreshFlag) {

if (type == BufferType.EDITABLE || mInput != null

|| needEditableForNotification) {

Editable t = mEditableFactory.newEditable(text);

text = t;

setFilters(t, mFilters);

InputMethodManager imm = InputMethodManager.peekInstance();

if (imm != null)

imm.restartInput(this);

} else if (type == BufferType.SPANNABLE || mMovement != null) {

text = mSpannableFactory.newSpannable(text);

} else if (!(text instanceof CharWrapper)) {

text = TextUtils.stringOrSpannedString(text);

}

}

if (mAutoLinkMask != 0) {

Spannable s2;

if (type == BufferType.EDITABLE || text instanceof Spannable) {

s2 = (Spannable) text;

} else {

s2 = mSpannableFactory.newSpannable(text);

}

if (Linkify.addLinks(s2, mAutoLinkMask)) {

text = s2;

type = (type == BufferType.EDITABLE) ? BufferType.EDITABLE : BufferType.SPANNABLE;

/*

* We must go ahead and set the text before changing the

* movement method, because setMovementMethod() may call

* setText() again to try to upgrade the buffer type.

*/

mText = text;

// Do not change the movement method for text that support text selection as it

// would prevent an arbitrary cursor displacement.

if (mLinksClickable && !textCanBeSelected()) {

setMovementMethod(LinkMovementMethod.getInstance());

}

}

}

时间: 2025-01-06 02:59:55

TextView添加链接的相关文章

android-使用Linkify给textview添加链接

问题描述 使用Linkify给textview添加链接 我想运用以下代码给textview添加一个链接: TextView textview = (TextView) findViewById(R.id.mytext);Pattern myPattern = Pattern.compile(""WordToBeLinked"");String link = ""http://mydomain.com/something"";L

textView 添加超链接(两种实现方式)_Android

在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接. 代码如下: 第一种 复制代码 代码如下: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout =

百度知道成功添加链接三部曲(二)

前几天在A5等几个站长网发表<百度知道成功添加链接三部曲(一)>后,为了交流的方便,我建立了一个百度知道推广的QQ群36278384,当天就有几十个人加入群里来问我一些百度推广的方法和注意事项,因我自己杂事太多,没办法在群里一一回复,所以还是写在这个帖子,算是给大家一个总的解答吧! 话说我获取百度知道团长的权杖后,按规定可以组建三个百度知道的团队了.要组建什么团队呢?当然是围绕自己网站来组建团队了,以后就可以为自己网站推广来出力了.根据我自己网站的需要,我组建了配音社团.广告传媒之家.美白联盟

Dreamweaver为iframe框架添加链接

  今天小编为大家介绍一下如何在Dreamweaver中为iframe框架添加链接. 首先选中iframe框架,这时我们可以在软件下方的属性窗口中找到链接项,在链接中填写需要链接的网页地址,就可以完成链接的添加.

wps如何添加链接本地文件地址

  wps添加链接本地文件地址的方法: 在某一篇文章中,找到你需要设置成超链接的文字,一般来说会有 作者,企业信息,或者个人微博,还有一些官方网站等,会做成超链接 形式,给超链接的背后带来流量.下面我就简单摘抄网络的一篇文章进行讲解 右键选中需要超链接的文字,右键可以找到超链接,或者选中以后直接按 Ctrl+K 这个时候,我们会发现有一个输入框,里面可以填写网络地址,也可以选择本地的文件,再这我就仅以 链接到百度为 测试; 成功设置好值,字体会变成有下划线的蓝色字体! 访问浏览器地址,此时我们

Flex中如何给一个按钮添加链接实现点击打开网页

 我们需要这样的一个效果:点击链接打开一个网页.下面为大家介绍下Flex中如何给一个按钮添加链接实现点击打开网页,感兴趣的朋友可以参考下 Flex中如何给一个按钮添加链接,点击链接打开一个网页呢?  可以用 navigateToURL 或者 htmlText 实现,请看下面的例子  复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?>  <mx:Application xmlns:mx="ht

如何在Mac电脑中Keynote添加链接

  相信很多在使用Mac电脑的用户都知道,在Mac电脑自带的Keynote程序中,您可以将文本.图像和形状变成链接,当您在演示期间点按这些链接时,它们会执行几个操作的任一操作.如果您不想 Keynote 自动检测链接,则可以在"编辑""替换"中关闭"智能链接".下面小编给大家带来在Mac电脑中Keynote添加链接方法. Mac电脑中Keynote添加链接 一.向文本或对象添加链接 1.按住 Control 键点按要添加链接的所选文本或对象,然后

Keynote如可添加链接

  在文本框或形状中键入文本时,Keynote 会自动检测有效网址 (URL) 或电子邮件地址.(地址后面必须紧跟空格.制表符或回车符,或者许多标点符号之一,包括引号.圆括号和方括号.)URL 及电子邮件地址会变成活跃的,并且带有下划线以表示它们是链接. 如果您不想 Keynote 自动检测链接,则可以关闭"智能链接". 向文本和对象添加链接 1.按住 Control 键点按要添加链接的所选文本或对象,然后选取"添加链接". 2.从"链接至"弹出

如何在Keynote中添加链接?

  在Mac自带的Keynote程序中,您可以将文本.图像和形状变成链接,当您在演示期间点按这些链接时,它们会执行几个操作的任一操作.具有链接的对象在演示文稿中将如同普通对象那样显示.在文本框或形状中键入文本时,Keynote 会自动检测文本中的有效网址 (URL) 或电子邮件地址.(地址后面必须紧跟空格.制表符或回车符,或者许多标点符号之一,包括引号.圆括号和方括号).URL 及电子邮件地址会变成活跃的,并且带有下划线以表示它们是链接. 如果您不想 Keynote 自动检测链接,则可以在"编辑