2012-08-25 13 views
13

I create a TextView dynamically and want to set the text as linkable. Text value is "Google”I, o którym mowa internecie & blogi like this, który pokazuje w ten sam sposób, ale nie mogłem przynieść oczekiwanych rezultatówandroid. Ustaw powiązanie z <a href> in TextView

Próbowałem różnych sposobów, ale wyjście widzę jest cały tekst. . z tekstem tylko kod próbowałem ze jest:

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); 

W moim wyjściu widzę „Google” i żaden związek próbowałem również czyste projekt & budowanie go ponownie, ale bez powodzenia szukam.. zobacz tylko "Google" jako podkreślone kolorem niebieskim (domyślnie) i po kliknięciu Google, przeglądarki Otwórz pod numerem http://google.com.

Czego brakuje w moim kodzie, aby uzyskać wyjście? BTW Dla REF: Używam 64bit Win 7, Java, Eclipse, Android API 8-2.2

Każda pomoc jest bardzo ceniona.

+1

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

+0

@ user370305, deleted Html.fromHtml, Próbowałem z & bez setClickable, ale bez powodzenia - nadal widzę pełny tekst Tvd

Odpowiedz

30

I wreszcie to działa przy użyciu następujący kod:

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() - zawiera adres URL podobny http: \ www.google.com l.getLeftString() - zawiera tekst url jak "Idź do Google"

WYNIKÓW: Tekst „Go do Google "w moim oknie dialogowym z niebieskim kolorem i podkreślonym, a po jego kliknięciu przeglądarka otwiera i wyświetla odpowiednią stronę. Po powrocie/opuszczeniu przeglądarki ponownie przychodzi do aplikacji ze stanu, w którym się znajdował.

Mam nadzieję, że to pomoże.

+1

W moim przypadku setClickable (true) nie jest potrzebny. t jeśli spróbuję dodać łącze z dodatkiem() do innego tekstu, to nie działa: S – AlvaroSantisteban

+10

Ważne. Nie ustawiaj android: autoLink = "web", ponieważ to nie działa! –

+4

@DawidDrozd to naprawdę bardzo ważne. Dzięki kolego, uratowałeś mnie przed zabiciem się :) –

10

Zapisz html w ciąg

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

Set TextView ID aby do

textViewLinkable 

W głównym wykorzystania aktywności podany kod:

((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 "Znowu brak rzeczywistego połączenia z kotwicą – Tvd

+0

czy uruchomiłeś go na urządzeniu? – SquiresSquire

+0

@SquireaSquire, testowałem na emulatorze tylko Api 2.2 i 4.1. – Tvd

5

Byłem też stoi ten sam problem mam rozwiązany za pomocą poniższego

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)); 

na zmianę koloru link do niebieskiego użytku

link.setLinkTextColor(Color.BLUE); 
+0

Klucz to 'Html.fromHtml (...)', który zwraca 'Spanned' – Benjamin

+0

Najlepsze rozwiązanie, które znalazłem do tej pory. Dzięki! – ivanleoncz

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

Przełóż to oświadczenie do TextView, aw ciągu znaków .xml ustaw ciąg znaków jako

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

Teraz podaj nazwę ciągu "android: text =" @ string/txtCredits "do klasy xml, w której znajduje się widok txt.

0

Tu jest moja prosta implementacja przetestowany do 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)); 
}