2010-07-08 10 views
13

Mam pytanie: Jak mogę umieścić hiperłącze W RAMKU tekstu zwykłego tekstu? Mam trochę tekstu, a w tekście wspomnę o adresie URL i chcę, aby ten URL był w innym kolorze, podkreślony i klikalny.Hiperłącze w Androidzie

wiem hiperłącza w Android może być umieszczony z „Linkify” .. i mam mowa android docs stronę

Rozważmy taką samą powyższy paragraf z „Android Docs” Chcę, aby wyświetlić w Android .... .

Odpowiedz

14

@Fedor .... znalazłem podać linki z API Demos.

to podejście jest ostatecznie używane do podawania linków między tekstem akapitu.

 SpannableString ss = new SpannableString("text4: Click here 
                to dial the phone."); 

    ss.setSpan(new StyleSpan(Typeface.ITALIC), 0, 6, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    ss.setSpan(new URLSpan("tel:4155551212"), 13, 17, 
      Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    TextView t4 = (TextView) findViewById(R.id.TextView01); 
    t4.setText(ss); 
    t4.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

Czy możemy ustawić zlokalizowane spannablestring? – Manohar

1

Spójrz na tego TextView underline phone number and hyperlink

Ale widzę Linkify nie daje Ci funkcje niezbędne. Nie stanowi problemu, możesz zaimplementować go ręcznie. Wystarczy dodać klikalne kliknięcia i uruchomić kliknięcie. Przykładowy kod tutaj http://www.orangeapple.org/?p=354.

+0

ya to jest poprawne "Linkify" The WebURLs ... ale "Android docs" powinno być jako link i gdy użytkownik kliknie na ten link, a następnie Tager URL powinien być zwolniony, tak samo jak znacznik zakotwiczenia HTML dla np. Android Docs

+0

Dodano jeszcze jedno podejście. – Fedor

+0

thanx za odpowiedź ..... naprawdę pomocna –

5

@PM - Myślę, że szukasz niestandardowych linkify dla Androida, mam nadzieję, że może to pomóc Ci, co chcesz http://android-geek.blogspot.com/2011/04/linkify-text-in-android.html

+0

+1, ya bharat ten przykład jest również najlepszy. –

+0

+1 To rozwiązanie działa, chociaż chciałbym, aby prostsze było tworzenie prostego hiperłącza w Androidzie! –

+0

Doskonały link, spróbuję jak najszybciej –

0

wiem, że to jest stare pytanie, ale jest to problem Niedawno zmagałem się i nie znalazłem odpowiedzi StackOverflow, która pomogła mi. Po długich eksperymentach znalazłem rozwiązanie i pomyślałem, że podzielę się nim z potomstwem.

W swojej strings.xml, używać znaczników HTML i znaczniki:

<string name="example"><![CDATA[I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string> 

w twojej XML, upewnij się, aby nie dodawać żadnych specjalnych atrybutów. NIE używaj Androida: autolink

W kodzie Java, musisz użyć fromHtml, Linkify i LinkMovementMethod. Upewnij się, aby zadzwonić Linkify przed LinkMovementMethod

exampleTextView.setText(Html.fromHtml(getString(R.string.example))); 
Linkify.addLinks(exampleTextView, Linkify.WEB_URLS); 
exampleTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

Kolejna uwaga: jeśli używasz te linki HTML, gdzie związek ma wyświetlany tekst, który nie pasuje do URL (Google i www.google.com), nie należy umieszczać surowe adresy URL w ciągu. A więc:

<string name="example"><![CDATA[www.google.com I know hyperlinks in android can be placed with "Linkify".. and i have referred <a href="http://developer.android.com/reference/android/text/util/Linkify.html">android docs</a> page]]></string> 

Zamieni "www.google.com" w link, ale nie zmieni "androidowych dokumentów" w link.

To było dla mnie bardzo frustrujące, ponieważ próbowałem wielu różnych kombinacji i podążałem za wieloma przykładami online, z których żaden nie działał, dopóki nie znalazłem odpowiedniej kombinacji magii opisanej powyżej. Mam nadzieję, że pomaga komuś innemu!

0

Use Spannable String

private void setTermsAndTextToClickable(TextView tandcTextView, String termsAndCon, String wordTohyperLink, String termsAndConUrl){ 
    if (TextUtils.isEmpty(termsAndCon)){ 
     tandcTextView.setVisibility(View.GONE); 
     return; 
    } 

    if (!TextUtils.isEmpty(termsAndCon) && !TextUtils.isEmpty(wordTohyperLink) && !TextUtils.isEmpty(termsAndConUrl)){ 
     SpannableString ssString = new SpannableString(termsAndCon); 
     int startLoc = termsAndCon.indexOf(wordTohyperLink); 
     int endLoc = termsAndCon.indexOf(wordTohyperLink) + wordTohyperLink.length(); 
     ssString.setSpan(new URLSpan(termsAndConUrl),startLoc,endLoc, 0); 
     tandcTextView.setText(ssString); 
     tandcTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

     ClickableSpan clickableSpan = new ClickableSpan() { 
      @Override 
      public void onClick(View widget) { 
       // We display a Toast. You could do anything you want here. 
       Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show(); 

      } 
     }; 
     ssString.setSpan(clickableSpan, startLoc, endLoc, 0); 
    }else{ 
     tandcTextView.setText(termsAndCon); 
    } 

} 
Powiązane problemy