2010-07-08 44 views
13

Tôi có câu hỏi: Làm cách nào để đặt siêu liên kết WITHIN khối văn bản của văn bản thông thường? Tôi có một số văn bản và trong văn bản tôi đề cập đến một URL và tôi muốn URL này có màu khác, gạch dưới và có thể nhấp.Siêu liên kết trong Android

Tôi biết các siêu liên kết trong android có thể được đặt với "Linkify" .. và tôi đã gọi android docs trang

Hãy xem xét các đoạn trên cùng với "tài liệu android" i muốn hiển thị trong android .... .

Trả lời

14

@Fedor .... tôi đã tìm thấy liên kết từ API Demos.

phương pháp này cuối cùng được sử dụng để tạo liên kết ở giữa văn bản đoạn văn.

 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

Chúng tôi có thể đặt một spannablestring được bản địa hóa không? – Manohar

1

Hãy nhìn vào đó TextView underline phone number and hyperlink

Nhưng tôi có thể thấy Linkify không cung cấp cho bạn các chức năng mà bạn cần. Không phải là một vấn đề, bạn có thể thực hiện nó bằng tay. Chỉ cần thêm ClickableSpans và handlre click. Mã mẫu tại đây http://www.orangeapple.org/?p=354.

+0

ya này là đúng để "Linkify" các WebURLs ... nhưng "docs Android" nên càng một liên kết và khi người dùng nhấp chuột vào liên kết này sau đó Tager URL nên bị sa thải, giống như thẻ Neo HTML ví dụ: Android Docs

+0

Một cách tiếp cận khác được thêm vào. – Fedor

+0

thanx cho câu trả lời ..... thực sự hữu ích –

5

@PM - Tôi nghĩ rằng bạn đang tìm kiếm linkify tùy chỉnh cho android, tôi hy vọng điều này sẽ có thể giúp bạn có được những gì bạn muốn http://android-geek.blogspot.com/2011/04/linkify-text-in-android.html

+0

+1, ya bharat ví dụ này cũng là ví dụ hay nhất. –

+0

+1 Giải pháp này hoạt động, mặc dù tôi muốn nó là cách đơn giản hơn để tạo ra một siêu liên kết đơn giản trong Android! –

+0

Liên kết tuyệt vời, tôi sẽ dùng thử ngay khi có thể –

0

Tôi biết đây là một câu hỏi cũ, nhưng đây là một vấn đề Gần đây tôi đã đấu tranh với, và tôi không tìm thấy câu trả lời StackOverflow đã giúp tôi. Vì vậy, sau khi thử nghiệm rộng rãi, tôi tìm thấy một giải pháp và nghĩ rằng tôi sẽ chia sẻ nó cho hậu thế.

Trong strings.xml của bạn, sử dụng các thẻ HTML và cán bộ chấm:

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

Trong XML của bạn, hãy chắc chắn để không thêm bất kỳ thuộc tính đặc biệt. KHÔNG sử dụng android: autolink

Trong mã Java của bạn, bạn phải sử dụng từHtml, Linkify và LinkMovementMethod. Hãy chắc chắn rằng để gọi Linkify trước LinkMovementMethod

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

caveat Một: nếu bạn đang sử dụng những liên kết HTML, nơi một liên kết có văn bản hiển thị mà không phù hợp với URL (Google và www.google.com), KHÔNG đặt URL thô trong chuỗi. Vì vậy:

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

Sẽ biến "www.google.com" thành liên kết nhưng sẽ không biến "tài liệu android" thành liên kết. Điều này rất bực bội khi tôi tìm ra, vì tôi đã thử nhiều kết hợp khác nhau và theo nhiều ví dụ trực tuyến, không cái nào làm việc cho đến khi tôi tìm thấy sự kết hợp ma thuật phù hợp được mô tả ở trên. Hy vọng nó sẽ giúp người khác!

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

} 
Các vấn đề liên quan