我們在項目中很常用到一個效果,那就是一段文字,設定字型大小不一樣,以求突出顯示效果,或者為哪幾個文字加上不同的色彩,或者加上超連結,電話,郵件等,就像是html裡面的那種點選跳轉的連結;
其實,Google已經提供了實作這種效果的方法給我們了,隻是我們在實際開發中,很少知道有這個方法。以至于我們項目中實作這樣的效果,其實都是通過兩個及以上的textview來區分實作這樣的效果。這樣豈不是很麻煩了麼;
下面我就給大家介紹實作此效果的方法,直接上代碼;
SpannableString ss = new SpannableString("超連結" + "\t" +"唐卡abc");//new 一個SpannableString對象
下面是spannablestring對象的使用,直接看注釋,都很清楚,就不發效果圖了,直接用就OK
SpannableString ss = new SpannableString(mFormat.format(count) + "\t" + unit);
/**
* 首先拿到一個TextView,然後構造一個SpannableString,構造方法中傳入的參數就是我們要顯示的文字,
* 然後就是一個最終要的方法,通過setSpan來設定背景色,
* 第一個參數是我們要設定的背景顔色,
* 第二第三個參數是我們要給哪一段的文字設定背景(該段文字的startIndex和endIndex)
* 最後一個參數有四個值:
* SPAN_INCLUSIVE_EXCLUSIVE:前面包括,後面不包括,即在文本前插入新的文本會應用該樣式,而在文本後插入新文本不會應用該樣式
* SPAN_INCLUSIVE_INCLUSIVE:前面包括,後面包括,即在文本前插入新的文本會應用該樣式,而在文本後插入新文本也會應用該樣式
* SPAN_EXCLUSIVE_EXCLUSIVE:前面不包括,後面不包括
* SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,後面包括
*
*/
ss.setSpan(new BackgroundColorSpan(Color.parseColor("#FFD700")), 0,
ss.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
textView.append("超連結,新加的文字");
ss.setSpan(new ClickableSpan() { //添加監聽回調
@Override
public void onClick(View widget) {
Toast.makeText(mContext, "超連結", Toast.LENGTH_SHORT).show();
}
}, 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// 設定textView為可點選狀态,以下方法是設定"超連結"為可點選狀态
textView.setMovementMethod(LinkMovementMethod.getInstance());
//設定前景色
ss.setSpan(new ForegroundColorSpan(Color.parseColor("#FF3030")), 0,
ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
*設定删除線效果
* 以下還有其它的設定,都是在setSpan第一個參數裡頭進行設定
* new UnderlineSpan() :設定下劃線
*new ScaleXSpan(2) :ScaleXSpan中的參數大于1表示橫向擴大,小于1大于0表示縮小,等于1表示正常顯示
* new StyleSpan(Typeface.BOLD):設定字型粗體樣式,Typeface.BOLD_ITALIC:斜體+粗體
* new BackgroundColorSpan(Color.YELLOW):文字背景顔色
* new ForegroundColorSpan(Color.BLUE):文字顔色
* new AbsoluteSizeSpan(36):文字大小
* new StrikethroughSpan():删除線
*
* 上下标的使用:
* new SubscriptSpan():設定下标
* new AbsoluteSizeSpan(30):設定下标字型大小
* new SuperscriptSpan():設定上标
* new URLSpan("tel:13534884482"):打電話
* new URLSpan("smsto:13534884482"):發短信
* new URLSpan("mailto:[email protected]"):發郵件
* new URLSpan("http://www.baidu.com"):浏覽網友
* 最後都要設定textView的 setMovementMethod(LinkMovementMethod.getInstance())方法
*/
ss.setSpan(new StrikethroughSpan(), 0, ss.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
/**
* 第一個參數傳入一個DynamicDrawableSpan對象,
* 其中這個對象的構造函數是圖檔的對齊方式,一共有兩種,如注釋
* ,實作該類的getDrawable方法,傳回一個Drawable對象即可
* ,注意這裡的圖檔會替換掉文字(如果我們使用這種效果,很多情況下就是要讓圖檔替換掉文字,
* 是以這并不算一個問題)
*/
ss.setSpan(
// DynamicDrawableSpan.ALIGN_BASELINE表示依照基線對齊
// DynamicDrawableSpan.ALIGN_BOTTOM表示依照底部對齊
new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BOTTOM) {
@Override
public Drawable getDrawable() {
Drawable d = mContext.getResources().getDrawable(
R.drawable.logo_tcl);
d.setBounds(0, 0, 150, 150);
return d;
}
}, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 這裡的參數0,1表示将“設”字替換為圖檔
ss.setSpan(new AbsoluteSizeSpan(smallSize),
ss.length() - unit.length(), ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
至此,你就可以很簡單的實作那些很炫的效果了。
尤其是設定圖檔,太常見了,在開發中。