閱讀831 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android開發技巧:在TextView控件中單擊鏈接彈出Activity

先準備兩個TextView控件。在本例中我們使用SpannableString對象來設置Span,SpannableString和SpannableStringBuilder的區別是SpannableString不允許修改文本,隻允許設置Span,而SpannableStringBuilder即允許修改文本,也允許設置Span。

下麵的代碼采用了隱式創建ClickableSpan對象實例的方法來設置Span,並在其中覆蓋了onClick方法。

package mobile.android.ch05.link.activity;
 
import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.method.LinkMovementMethod;
 import android.text.style.ClickableSpan;
 import android.view.View;
 import android.widget.TextView;
 
public class Main extends Activity
 {
     @Override
     public void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         TextView textView1 = (TextView) findViewById(R.id.textview1);
         TextView textView2 = (TextView) findViewById(R.id.textview2);
 
        String text1 = "顯示Activity1";
         String text2 = "顯示Activity2";
         //  將文本轉換成SpannableString對象
        SpannableString spannableString1 = new SpannableString(text1);
         SpannableString spannableString2 = new SpannableString(text2);
         //  將text1中的所有文本設置成ClickableSpan對象,並實現了onClick方法
        spannableString1.setSpan(new ClickableSpan()
         {
                        //  在onClick方法中可以編寫單擊鏈接時要執行的動作
            @Override
             public void onClick(View widget)
             {
                 Intent intent = new Intent(Main.this, Activity1.class);
                 //  顯示Activity1
                 startActivity(intent);
             }
         }, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         //  將text2中的所有文本設置成ClickableSpan對象,並實現了onClick方法
        spannableString2.setSpan(new ClickableSpan()
         {
                        //  在onClick方法中可以編寫單擊鏈接時要執行的動作
            @Override
             public void onClick(View widget)
             {
                 Intent intent = new Intent(Main.this, Activity2.class);
                 //  顯示Activity2
                 startActivity(intent);
             }
         }, 0, text1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
         //  使用SpannableString對象設置兩個TextView控件的內容
        textView1.setText(spannableString1);
         textView2.setText(spannableString2);
         //  在單擊鏈接時凡是有要執行的動作,都必須設置MovementMethod對象
        textView1.setMovementMethod(LinkMovementMethod.getInstance());
         textView2.setMovementMethod(LinkMovementMethod.getInstance());
     }
 }

現在我們來看一下setSpan方法,該方法有4個參數。第一個參數需要設置一個ClicableSpan對象,第二個和第三個參數分別表示文本中要設置成Span的某段文本的起始位置和終止位置的下一個字符的位置,也就是start和end。最後一個參數是一個標誌。在本例中設為Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,該標誌在TextView控件中意義不大,但在EditText控件中表示在當前Span效果的前後輸入字符時並不應用Span的效果。還可以設置如下幾個類似的值。
1. Spanned.SPAN_EXCLUSIVE_INCLUSIVE:在Span前麵輸入的字符不應用Span的效果,在後麵輸入的字符應用Span效果。
2. Spanned.SPAN_INCLUSIVE_EXCLUSIVE:在Span前麵輸入的字符應用Span的效果,在後麵輸入的字符不應用Span效果。
3. Spanned.SPAN_INCLUSIVE_INCLUSIVE:在Span前後輸入的字符都應用Span的效果。
本例的顯示效果如圖5.5所示。單擊屏幕上的兩個鏈接後,就會分別顯示Activity1和Activity2的界麵。

bb.png


最後更新:2017-04-02 17:51:23

  上一篇:go Android 創建與解析XML(六)—— 比較與使用
  下一篇:go 使用 Linux 搭建 VPN