Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android:SpannableString的應用,TextView中某些文字的點擊事件

android:SpannableString的應用,TextView中某些文字的點擊事件

編輯:關於Android編程

各種的Span就是通過SpannableString來封裝樣式的,設置完Span之後需要將Span放入到SpannableString類中,然後SpannableString設置到TextView中去。

在這裡就寫一個小例子。

通過使用SpannableString類,來實現在Activity中點擊某些文字進入到另外一個Activity,當然其它效果也可以,比如顯示一個對話框,詳細信息什麼的,看個人愛好。我理解的 就是一個點擊事件。。別噴我、、

好了 ,廢話不說。

首先在xml布局文件中添加一個TextView控件並為其添加ID

 



    


在MainActivity中,首先new一個SpannableString對象

 

 

SpannableString spannableString=new SpannableString(CharSequence);

我們發現括號裡面的參數是CharSequence大家都知道String是它的子類。其實這裡也就是我們要設置在TextView的文本內容。我們就創建一個String對象就好了。
	String text="我是蘇蘇,打開另外一個Activity吧";
設置了這些還沒完。上面已經說了各種的Span就是通過SpannableString來封裝樣式的,設置完Span之後需要將Span放入到SpannableString類中,然後SpannableString設置到TextView中去。

 

我們還要把Span放入到SpannableString

用到這個方法

 

spannableString.setSpan(Object what,int start,int end,int flags);

what是Object類。而剩余的三個都是int型,所以what肯定是span對象,上面說了我們要實現的是TextView的點擊事件,所以這裡就寫上new ClickableSpan(),裡面方法就用ctrl+1來添加。star就是我們要實現點擊事件的文字的起始下標,end是結束的下標。最後一個flags是一個輔助作用。什麼意思呢?就是點擊的文字范圍包含不包含端點,這裡的端點就是star和end.第三個參數有這些Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含start和end所在的端點 (star,end) Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端點(star,end] Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含start,但不包含end所在的端點 [star,end) Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含start和end所在的端點 [star,end],我們在這裡用的是包含端點Spannable.SPAN_EXCLUSIVE_EXCLUSIVE

 

我已經設置了String text="我是蘇蘇,打開另外一個Activity吧".我想從‘打’開始,‘吧’結束的文字有點擊效果。

那麼star=5,end=text.length();

具體代碼如下

 

spannableString.setSpan(new ClickableSpan() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				
				startActivity(new Intent(MainActivity.this,NewActivity.class));
			}
		}, 5, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
然後把SpannableString設置到TextView中去。

 

 

tv_intent.setText(spannableString);

設置完這些還不算完,為了響應文字的點擊效果還要繼續設置

 

 

tv_intent.setMovementMethod(LinkMovementMethod.getInstance());

這句話僅僅是為了響應點擊效果。

 

附上運行結果。

大家看到了下標為star和end的都能響應點擊事件。

\

完整代碼:

 

package com.example.textview;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.text.style.ClickableSpan;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private TextView tv_intent;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv_intent=(TextView) findViewById(R.id.tv_intent);
		String text="我是蘇蘇,打開另外一個Activity吧";
		SpannableString spannableString=new SpannableString(text);
		spannableString.setSpan(new ClickableSpan() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "請稍等1秒鐘進入下一個Activity界面", Toast.LENGTH_LONG).show();
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				startActivity(new Intent(MainActivity.this,NewActivity.class));
			}
		}, 5, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
		tv_intent.setText(spannableString);
		//為了響應點擊
		tv_intent.setMovementMethod(LinkMovementMethod.getInstance());
	}

}


 

 

 

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved