2011-08-31 55 views

回答

26
Spanned spanned = Html.fromHtml("<a href=\"http://google.com\">google.com</a>"); 
textView.setText(spanned); 

編輯:這不是處理鏈接的點擊一個理想的方式,但我不知道任何其他方式。

您的主要活動包含一個帶有鏈接的TextView。鏈接網址具有自定義方案。

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     TextView link = (TextView)findViewById(R.id.link); 
     link.setText(
      Html.fromHtml("<a href='myscheme://www.google.com'>link</a>")); 
     link.setMovementMethod(LinkMovementMethod.getInstance()); 
    } 
} 

當這個鏈接被點擊的Android使用鏈接URL開始與ACTION_VIEWActivity。假設您有一個WebViewActivity,它使用此自定義方案處理URI。它獲取通過的URI並用http替換它的方案。

public class WebViewActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     if(savedInstanceState == null) { 
      String url = 
       getIntent().getDataString().replace("myscheme://", "http://"); 
      // do something with this URL. 
     } 
    } 
} 

處理自定義的URI方案WebViewActivity必須在AndroidManifest.xml文件的意圖過濾器:

<activity android:name=".WebViewActivity" android:exported="false"> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="myscheme" /> 
    </intent-filter> 
</activity> 
+0

謝謝精靈,但它會在默認瀏覽器中打開不在WebView中。 :( –

+1

哦,我誤解了你的問題,在這種情況下,你可以創建一個自己的模式的URL,並在AndroidManifest.xml中註冊一個意圖過濾器。 – Michael

+0

再次感謝你,但你能解釋一下嗎 –

-2
hotel_website=(TextView)viewflipper.findViewById(R.id.tv_website); 
hotel_website.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    String url = "http://" +hotel_website.getText().toString(); 
    Intent i = new Intent(Intent.ACTION_VIEW); 
    i.setData(Uri.parse(url)); 
    startActivity(i); 
    } 
}); 

和XML

<TextView 
    android:clickable="true" 
</TextView> 
2

設置屬性機器人:自動鏈接到你的textview佈局

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:text="your text" 
    android:autoLink="web" /> 
+0

這會打開瀏覽器中的鏈接。答案是如何在WebView中打開鏈接 – eugeneek

+0

只是一個小問題。應用autoLink後,顏色變爲綠色,並應用不同的顏色不起作用。怎麼樣 ? – Mahadev

+0

你救了我的一天。謝謝 :) – Atul

0

以下爲我工作。我剛剛使用了LinkMovementMethod的onTouchEvent代碼。你可以像上面提到的Michael那樣在textView中設置鏈接,或者你可以在strings.xml中設置它。我用這個庫打開鏈接https://github.com/DreaminginCodeZH/CustomTabsHelper

textView.setMovementMethod(new MovementMethod() { 
     @Override 
     public void initialize(TextView widget, Spannable text) { 

     } 

     @Override 
     public boolean onKeyDown(TextView widget, Spannable text, int keyCode, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public boolean onKeyUp(TextView widget, Spannable text, int keyCode, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public boolean onKeyOther(TextView view, Spannable text, KeyEvent event) { 
      return false; 
     } 

     @Override 
     public void onTakeFocus(TextView widget, Spannable text, int direction) { 

     } 

     @Override 
     public boolean onTrackballEvent(TextView widget, Spannable text, MotionEvent event) { 
      return false; 
     } 

     /** 
     * Borrowed code for detecting and selecting link from 
     * {@link LinkMovementMethod#onTouchEvent(TextView, Spannable, MotionEvent)} 
     */ 
     @Override 
     public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) { 
      int action = event.getAction(); 

      if (action == MotionEvent.ACTION_UP || 
        action == MotionEvent.ACTION_DOWN) { 
       int x = (int) event.getX(); 
       int y = (int) event.getY(); 

       x -= widget.getTotalPaddingLeft(); 
       y -= widget.getTotalPaddingTop(); 

       x += widget.getScrollX(); 
       y += widget.getScrollY(); 

       Layout layout = widget.getLayout(); 
       int line = layout.getLineForVertical(y); 
       int off = layout.getOffsetForHorizontal(line, x); 

       ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class); 

       if (link.length != 0) { 
        if (action == MotionEvent.ACTION_UP) { 
         // do whatever else you want here on link being clicked 
         Selection.removeSelection(buffer); 

        } else if (action == MotionEvent.ACTION_DOWN) { 
         Selection.setSelection(buffer, 
           buffer.getSpanStart(link[0]), 
           buffer.getSpanEnd(link[0])); 
        } 

        return true; 
       } else { 
        Selection.removeSelection(buffer); 
       } 
      } 

      return false; 
     } 

     @Override 
     public boolean onGenericMotionEvent(TextView widget, Spannable text, MotionEvent event) { 
      return false; 
     } 

     @Override 
     public boolean canSelectArbitrarily() { 
      return false; 
     } 
    }); 
相關問題