使用SpannableString,ClickableSpan,文字部分可點選
阿新 • • 發佈:2019-01-06
最近4個月都在忙一個專案,最近專案接近尾聲,所有打算趁這個機會稍微做一點總結。
本次總結的功能是實現一段文字,部分文字顏色不同,部分文字有下劃線並且可以點選,主要的思路就是使用SpannableString,自定義一個ClickableSpan。以下就是實現該功能的具體步驟以及相關程式碼。
1.自定義ClickableSpan,通過不同的type去判斷文字顯示的顏色以及下劃線顯示狀況。
- publicabstractclass ClickableColorSpan extends ClickableSpan {
- privateint type;
-
public
- // this.str = str;
- this.type = type;
- }
- @Override
- publicvoid updateDrawState(TextPaint ds) {
- if (type == Constants.NOTHING)// 空格情況
- {
- // ds.setColor(ds.linkColor);
-
ds.setColor(getActivity().getResources().getColor(
- R.color.linkcolor));
- ds.setUnderlineText(false);//是否顯示下劃線
- }
- if (type == Constants.DESCRIPTION)// 解釋或空格選擇
- {
- ds.setColor(getActivity().getResources().getColor(
- R.color.orange));
-
ds.setUnderlineText(false
- }
- if (type == Constants.NORMAL)// 正常情況
- {
- // ds.setColor(ds.linkColor);
- ds.setColor(getActivity().getResources().getColor(
- R.color.linkcolor));
- ds.setUnderlineText(true);
- }
- if (type == Constants.SELECTED)// 非空格選擇
- {
- // ds.setColor(ds.linkColor);
- ds.setColor(getActivity().getResources().getColor(
- R.color.orange));
- ds.setUnderlineText(true);
- }
- }
- }
2.生成富文字
- private SpannableString getClickableSpan() {
- int start = 2;//設定點選範圍
- int end = 4;
- SpannableString spanableInfo = new SpannableString("hello word");
- spanableInfo.setSpan(
- new ClickableColorSpan(0) {
- @Override
- publicvoid onClick(View v) {
- //點選事件
- }
- }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- return spanableInfo;
- }
- txtView.setText(getClickableSpan());
- txtView.setMovementMethod(LinkMovementMethod.getInstance());