最近項目中遇到一個問題,就是一段文字中股票可點擊並跳到股票詳情,只記得SpannableString可以實現富文本功能,但並不知道可實現的富文本有點擊功能,就開始借助萬能搜索引擎,結果不出意料,的確有ClickableSpan這個類可實現點擊功能,於是就開始查找Android api ClickableSpan,廢話不說了上代碼
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.text); tv.setText(getClickableSpan()); tv.setMovementMethod(LinkMovementMethod.getInstance());//必須設置否則無效 } private SpannableString getClickableSpan() { View.OnClickListener l = new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, " you are clicking ~", Toast.LENGTH_SHORT).show(); } }; SpannableString spanableInfo = new SpannableString( "This is a test, Click Me"); int start = 16; int end = spanableInfo.length(); spanableInfo.setSpan(new Clickable(l), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return spanableInfo; } /** * 內部類,用於截獲點擊富文本后的事件 */ class Clickable extends ClickableSpan implements View.OnClickListener { private final View.OnClickListener mListener; public Clickable(View.OnClickListener mListener) { this.mListener = mListener; } @Override public void onClick(View v) { mListener.onClick(v); } @Override public void updateDrawState(TextPaint ds) { ds.setColor(ds.linkColor); ds.setUnderlineText(false); //去除超鏈接的下划線 } } }
參考:http://blog.csdn.net/lan410812571/article/details/9083023
http://blog.csdn.net/lan410812571/article/details/9083023