【Android】TextView 中 Link 的點擊事件控制


如標題般,要如何在控制在TextView中點擊超連結做想做的事。

首先在xml中要先加入autoLink的屬性
  
<TextView
    android:id="@+id/test_textView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:autoLink="all"
/>
其中autoLink="all" 會把可能為超連結的字串自動轉成超連結(網址、信箱、電話之類)


那在TextView中顯示的連結要如何控制點擊事件呢?
在你的code中加入以下代碼(視情況做調整)
mTextLink = (TextView) dialog.findViewById(R.id.test_textView);
/*假設mTextLink中的文字內容為
   *"聯絡方式:stephen.tsai@gmail.com"
   */  
        CharSequence text = mAutoLink.getText();
        if (text instanceof Spannable) {
            int end = text.length();
            Spannable sp = (Spannable) mAutoLink.getText();
            URLSpan[] spans = sp.getSpans(0, end, URLSpan.class);
            SpannableStringBuilder style = new SpannableStringBuilder(text);
            style.clearSpans();// should clear old spans
            for (URLSpan span : spans) {
                TextSpan mSpan = new TextSpan(span.getURL());
                style.setSpan(mSpan, sp.getSpanStart(span), sp.getSpanEnd(span), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
            }
            mAutoLink.setText(style);
        }
        mAutoLink.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            Toast.makeText(this,"整個TextView的點擊事件",Toast.LENGTH_SHORT).show();
        }});



        private  class TextSpan extends ClickableSpan {    
            private String mSpan;    
            TextSpan(String span) {    
                mSpan = span;    
            }    
  
            @Override    
            public void onClick(View widget) {    
                /*Link被點擊 
                 *可以加入自己想做的事件 
                 */  
                Intent intent = new Intent(Intent.ACTION_VIEW);  
                intent.setData(Uri.parse(mSpan));  
                startActivity(intent);  
            }    
        }    

以上就是簡單的TextView中Link連結點擊的控制範例。




沒有留言:

張貼留言