2011-08-02 44 views
33

Tôi nhận được văn bản động từ một dịch vụ web và hiển thị giống nhau trong một TextView. Đôi khi TextView có url như <a href="http://hello.com">hello</a>. Tôi đã đặt văn bản bằng cách sử dụng mã sau.Liên kết hoạt động của url trên Android trong TextView

textView.setText(Html.fromHtml(sampletext)); 

Và cũng đặt android:autoLink="web" trong xml tương ứng của chứa TextView. Bây giờ các liên kết được hiển thị đúng với màu xanh và gạch chân, nhưng tôi tìm thấy nó chỉ là một liên kết chết. Không có gì xảy ra nếu chúng ta cố bấm vào nó. Tôi phải làm gì để liên kết hoạt động?

+2

Xin chào dalandroid, tôi không có t chắc chắn nhưng tôi nghĩ bạn nên đặt sự kiện textView OnClick. Và trên đó onClick đặt linkcode của bạn. Hãy thử nó Tôi không chắc chắn nó có thể giúp bạn. Cảm ơn. – anddev

+0

bạn có đề cập đến sự cho phép internet trong android –

+0

@Avi Kumar Manku Ya ... chắc chắn –

Trả lời

90

Sau khi xem xét lại tất cả các giải pháp, một bản tóm tắt với một số giải thích:

android:autoLink="web" 

sẽ tìm thấy một URL và tạo liên kết ngay cả khi android: linksClickable không được đặt, các liên kết theo mặc định có thể nhấp được. Bạn không phải duy trì URL một mình, ngay cả ở giữa văn bản, nó sẽ được phát hiện và có thể nhấp được.

<TextView 
    android:text="My web site: www.stackoverflow.com" 
    android:id="@+id/TextView1" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:autoLink="web"> 
</TextView> 

Để thiết lập một liên kết thông qua mã, cùng một nguyên tắc, không cần mẫu hoặc android: Tự động liên kết trong cách bố trí, liên kết được tìm thấy tự động sử dụng Linkify:

final TextView myClickableUrl = (TextView) findViewById(R.id.myClickableUrlTextView); 
    myClickableUrl.setText("Click my web site: www.stackoverflow.com"); 
    Linkify.addLinks(myClickableUrl, Linkify.WEB_URLS); 
+0

Có, các liên kết theo mặc định có thể nhấp, cảm ơn bạn. –

+1

Cảm ơn làm việc tốt của nó, làm thế nào để tải trong webview – Prasad

+1

Trả lời ở trên không tương ứng với một lần xem web, nếu bạn muốn sử dụng một lần xem web chỉ cần tải html của bạn vào webview của bạn. –

34

này làm việc cho tôi:

<TextView 
    android:text="www.hello.com" 
    android:id="@+id/TextView01" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:autoLink="web"> 
</TextView> 
+1

I sử dụng ... nhưng nó được đưa ra với màu xanh và gạch dưới văn bản, nhưng tôi tìm thấy nó chỉ là một liên kết chết. Không có hành động nhấp chuột nào xảy ra. Đó là vấn đề của tôi. –

+0

Tôi biết điều này là cũ, bạn cần phải đặt đúng có thể nhấp và xác định chức năng onclick – user173488

3

tôi có đưa ra một số ý tưởng mà tôi đã tìm thấy nó

TextView tv = (TextView) findViewById(R.id.link); 
    WebView wv = (WebView) findViewById(R.id.webView); 
    URLSpan[] urlSpans = tv.getUrls(); 
    for (URLSpan urlSpan : urlSpans) 
    { 
     wv.loadUrl(urlSpan.getURL()); 
    } 

string.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">Hello, Android</string> 
    <string name="link">'<a href="http://www.google.com" rel="nofollow">Google</a>'</string> 
</resources> 

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     > 

    <TextView 
      android:id="@+id/link" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:autoLink="all" 
      android:linksClickable="true" 
      android:text="@string/link" /> 

    <WebView 
      android:id="@+id/webView" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1.0" /> 

</LinearLayout> 
+0

cho giá trị thẻ chuỗi liên kết trong string.xml, đảm bảo bạn thoát khỏi các ký tự sau, nếu không dự án có thể không xây dựng được. & đổi thành & <đổi thành <> đổi thành > – hyena

4

kiểm tra ra cách tiếp cận này:

String text = "Visit stackoverflow.com"; 
    TextView label = new TextView(this); 
    label.setText(text); 
    Pattern pattern = Pattern.compile("stackoverflow.com"); 
    Linkify.addLinks(label, pattern, "http://"); 
+0

Linkify là gì? –

+3

@StealthRabbi 'nhập android.text.util.Linkify;' –

+0

Ồ, theo tên tôi giả định đó là một số thư viện của bên thứ ba. cảm ơn. –

2

Trong XML của bạn, bạn cần phải thêm android:linksClickable="true" trong TextView.

12

Để Tiết kiệm bất kỳ một thời gian là giải pháp đúng là

<TextView 
    android:text="www.hello.com" 
    android:id="@+id/TextView01" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:autoLink="web" 
    android:linksClickable="true"> 
</TextView> 

và tôi sử dụng nó và nó hoạt động hoàn hảo

+0

Cảm ơn bạn. nó hoạt động hoàn hảo. – Rooney

+7

Nếu chúng ta muốn văn bản khác với url thực tế thì sao? : P – Blaise

0

Có 2 trường hợp:

  • văn bản trông giống như "click on http://www.hello.com"

thứ en bạn chỉ cần thiết lập các Tự động liên kết thuộc tính trong xml để các liên kết được tự động phát hiện trong văn bản:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:autoLink="web" 
    android:text="click on http://www.hello.com"/> 
  • văn bản trông giống như click on <a href="http://hello.com">hello</a>

sau đó bạn phải làm theo mã và cho biết văn bản là html và chỉ định phương thức di chuyển Liên kết cho nhấp chuột:

String text = "click on <a href=\"http://hello.com\">hello</a>"; 
    TextView textView = view.findViewById(R.id.textView); 
    textView.setText(Html.fromHtml(text)); 
    textView.setMovementMethod(LinkMovementMethod.getInstance()); 
Các vấn đề liên quan