2012-08-25 98 views
13

I create a TextView dynamically and want to set the text as linkable. Text value is "Google”设置链接我提到互联网&博客like this,这显示了同样的方式,但我无法产生预期的效果机器人:与<a href> in TextView

我尝试不同的方法,但我看到的输出是整个文本。 。用文字只有我有尝试过的代码是:

TextView tv1 = new TextView(this); 
tv1.setLayoutParams(textOutLayoutParams); 
// Make Linkable 
tv1.setMovementMethod(LinkMovementMethod.getInstance()); 
tv1.setText(Html.fromHtml(l.getLeftString())); 

/*SpannableString s = new SpannableString(l.getLeftString()); 
Linkify.addLinks(s, Linkify.WEB_URLS); 
tv1.setText(s);     
tv1.setMovementMethod(LinkMovementMethod.getInstance()); 
*/ 
dialogLayout.addView(tv1); 

在我的输出之我见“Google”,并没有链接我也试着清洁工程&重新构建它,但没有成功 我期待。只能看到“Google”用蓝色下划线(默认)并点击浏览器Google打开http://google.com

我的代码中缺少什么来获取输出? BTW对于REF:我使用64位Win 7,Java,Eclipse,Android API 8-2.2

任何帮助,高度赞赏。

+1

看http://stackoverflow.com/questions/12069811/android-hyperlinks-on-textview-in-custom-alertdialog-not -clickable/12070751#12070751 – user370305

+0

@ user370305,删除Html。fromHtml,与和无setClickable尝试过,但没有成功 - 仍然可以看到全文 Tvd

回答

30

我终于得到它的工作使用以下代码:

TextView tv1 = new TextView(this); 
tv1.setLayoutParams(textOutLayoutParams); 
tv1.setText(Html.fromHtml("<a href=\""+ l.getRightString() + "\">" + l.getLeftString() + "</a>")); 
tv1.setClickable(true); 
tv1.setMovementMethod (LinkMovementMethod.getInstance()); 
dialogLayout.addView(tv1); 

l.getRightString() - 包含如HTTP网址:\ www.google.com l.getLeftString() - 包含像 “转到谷歌”

结果URL文本: 文本“围棋到Google“,在我的对话框中用蓝色和下划线标出,点击它,浏览器打开并浏览相应的页面。在返回/退出浏览器时,它会再次从已经离开的状态进入应用程序。

希望这会有所帮助。

+1

在我的情况,不需要setClickable(真)。卜■如果我尝试添加与追加()到另一个文本的链接,这是行不通的:S – AlvaroSantisteban

+10

重要。不要设置android:autoLink =“web”,因为它不起作用! –

+4

@DawidDrozd确实非常重要。感谢队友,你杀死我自己救了我:) –

10

在一个字符串

<string name="link">&lt;a href="http://www.google.com">Google&lt;/a></string> 

设置TextView的ID保存HTML向

textViewLinkable 

在主要活动中使用下面的代码:

((TextView) findViewById(R.id.textViewLinkable)).setMovementMethod(LinkMovementMethod.getInstance()); 
((TextView) findViewById(R.id.textViewLinkable)).setText(Html.fromHtml(getResources().getString(R.string.link))); 
+1

Itried String s = "<a href=\"http://google.com\">Google</a>"; \t \t tv1.setMovementMethod(LinkMovementMethod.getInstance()); \t \t tv1.setText(Html.fromHtml(s)); and what I see is "Google“又没有实际的锚链接 – Tvd

+0

具有u的设备上运行它 – SquiresSquire

+0

@SquireaSquire,我已经在模拟器测试仅API 2.2和4.1。?。 – Tvd

5

我也面临着同样的问题,我用解决以下

String str_text = "<a href=http://www.google.com >Google</a>"; 
TextView link; 
link = (TextView) findViewById(R.id.link); 
link.setMovementMethod(LinkMovementMethod.getInstance()); 
link.setText(Html.fromHtml(str_text)); 

改变链接的颜色为蓝色使用

link.setLinkTextColor(Color.BLUE); 
+0

的关键是'Html.fromHtml(...)'返回一个'Spanned' – Benjamin

+0

,我发现迄今最好的解决办法。谢谢! – ivanleoncz

1
txtview.setMovementMethod(LinkMovementMethod.getInstance()); 

通过这个语句将TextView的,而在串.xml设置字符串为

<string name="txtCredits"> <a href="http://www.google.com"></a></string> 

现在将此字符串名称“android:text =”@ string/txtCredits“传递给您的xml类,其中txtview位于此处。

0

这里是我的简单的实现试验到Android的N.

String termsText = "By registering, you are agree to our"; 
String termsLink = " <a href=https://www.yourdomain.com/terms-conditions.html >Terms of Service</a>"; 
String privacyLink = " and our <a href=https://www.yourdomain.com/privacy-policy.html >Privacy Policy</a>"; 
String allText = termsText + termsLink + privacyLink; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    ((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance()); 
    ((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText, Html.FROM_HTML_MODE_LEGACY)); 
} 
else { 
    ((TextView) findViewById(R.id.text_terms_conditions)).setMovementMethod(LinkMovementMethod.getInstance()); 
    ((TextView) findViewById(R.id.text_terms_conditions)).setText(Html.fromHtml(allText)); 
}