2012-08-25 119 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)); 
}