SpannableString簡介

參考鏈接:

http://www.cnblogs.com/jisheng/archive/2013/01/10/2854088.html

http://www.reibang.com/p/d4349a4ca216

package com.lml.activity.spanablestrtest;

import android.content.res.Resources;

import android.graphics.BlurMaskFilter;

import android.graphics.Color;

import android.graphics.EmbossMaskFilter;

import android.graphics.Typeface;

import android.graphics.drawable.Drawable;

import android.support.v4.content.res.ResourcesCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.text.Spannable;

import android.text.SpannableString;

import android.text.method.LinkMovementMethod;

import android.text.style.AbsoluteSizeSpan;

import android.text.style.BackgroundColorSpan;

import android.text.style.ClickableSpan;

import android.text.style.DynamicDrawableSpan;

import android.text.style.ForegroundColorSpan;

import android.text.style.ImageSpan;

import android.text.style.MaskFilterSpan;

import android.text.style.RelativeSizeSpan;

import android.text.style.ScaleXSpan;

import android.text.style.StrikethroughSpan;

import android.text.style.StyleSpan;

import android.text.style.SubscriptSpan;

import android.text.style.SuperscriptSpan;

import android.text.style.TextAppearanceSpan;

import android.text.style.URLSpan;

import android.text.style.UnderlineSpan;

import android.view.View;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView tv_show = (TextView)findViewById(R.id.tv_strshow);

SpannableString spanText = getBackgroundColorSpanStr("BackgroundColor");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getForegroundColorSpanStr("ForegroundColor");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getBlurMaskSpanStr("BlurMask");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getEmbossMaskSpanStr("EmbossMask");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getStrikethroughSpanStr("Strikethrough");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getUnderlineSpanStr("Underline");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getAbsoluteSizeSpanStr("AbsoluteSize");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getDynamicDrawableSpanStr("DynamicDrawable");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getImageSpanStr("Image");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getScaleXSpanStr("ScaleX");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getStyleSpanStr("Style");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getClickableSpanStr("Clickable");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getSubscriptSpanStr("Subscript");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getSuperscriptSpanStr("Superscript");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getURLSpanStr("URLSpanStr");

tv_show.append(spanText);

tv_show.append("\n");

spanText = getTextAppearanceSpanStr("TextAppearance");

tv_show.append(spanText);

tv_show.setMovementMethod(LinkMovementMethod.getInstance());

}

/**

* 背景色

* @param str

* @return

*/

private SpannableString getBackgroundColorSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 0, spanText.length(),

Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 前景色

* @param str

* @return

*/

private SpannableString getForegroundColorSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 0, spanText.length(),

Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 模糊

* @param str

* @return

*/

private SpannableString getBlurMaskSpanStr(String str) {

SpannableString spanText = new SpannableString(str);

MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, BlurMaskFilter.Blur.OUTER));

spanText.setSpan(maskFilterSpan, 0, spanText.length(), Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

return spanText;

}

/**

* 浮雕

* @param str

* @return

*/

private SpannableString getEmbossMaskSpanStr(String str) {

SpannableString spanText = new SpannableString(str);

//浮雕(EmbossMaskFilter)

MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));

spanText.setSpan(maskFilterSpan, 0, spanText.length(), Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

return spanText;

}

/**

* 光柵

* @param str

* @return

*/

private SpannableString getStrikethroughSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new StrikethroughSpan(), 0, spanText.length(), Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 下劃線

* @param str

* @return

*/

private SpannableString getUnderlineSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new UnderlineSpan(), 0, spanText.length(), Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 絕對(duì)大小

* @param str

* @return

*/

private SpannableString getAbsoluteSizeSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(), Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 動(dòng)態(tài)圖

* @param str

* @return

*/

private SpannableString getDynamicDrawableSpanStr(String str){

SpannableString spanText = new SpannableString(str);

DynamicDrawableSpan drawableSpan = new DynamicDrawableSpan(

DynamicDrawableSpan.ALIGN_BOTTOM) {

@Override

public Drawable getDrawable() {

Drawable d = ResourcesCompat.getDrawable(getResources(), R.mipmap.ic_launcher, null);

d.setBounds(0, 0, 50, 50);

return d;

}

};

spanText.setSpan(drawableSpan, 1, 2, Spannable.

SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 圖片

* @param str

* @return

*/

private SpannableString getImageSpanStr(String str){

SpannableString spanText = new SpannableString(str);

Drawable d = ResourcesCompat.getDrawable(getResources(), R.mipmap.ic_launcher, null);

d.setBounds(0, 0, 50, 50);

spanText.setSpan(new ImageSpan(d), 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 縮放

* @param str

* @return

*/

private SpannableString getScaleXSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new ScaleXSpan(3.8f), 2, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 樣式

* @param str

* @return

*/

private SpannableString getStyleSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 2, 3,

Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 點(diǎn)擊

* @param str

* @return

*/

private SpannableString getClickableSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new ClickableSpan() {

@Override

public void onClick(View widget) {

Toast.makeText(MainActivity.this,"onclick",Toast.LENGTH_SHORT).show();

}

}, 3, spanText.length(),

Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 下標(biāo)

* @param str

* @return

*/

private SpannableString getSubscriptSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new SubscriptSpan(), 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 上標(biāo)

* @param str

* @return

*/

private SpannableString getSuperscriptSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new SuperscriptSpan(), 2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* url

* @param str

* @return

*/

private SpannableString getURLSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new URLSpan("http://www.baidu.com"), 3, spanText.length(),

Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

/**

* 文本外貌

* @param str

* @return

*/

private SpannableString getTextAppearanceSpanStr(String str){

SpannableString spanText = new SpannableString(str);

spanText.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium),

2, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

return spanText ;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末市埋,一起剝皮案震驚了整個(gè)濱河市摇肌,隨后出現(xiàn)的幾起案子烁涌,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仙辟,死亡現(xiàn)場(chǎng)離奇詭異牢硅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剥啤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門锦溪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人府怯,你說我怎么就攤上這事刻诊。” “怎么了牺丙?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵则涯,是天一觀的道長。 經(jīng)常有香客問我冲簿,道長粟判,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任峦剔,我火速辦了婚禮档礁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吝沫。我一直安慰自己呻澜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布惨险。 她就那樣靜靜地躺著羹幸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辫愉。 梳的紋絲不亂的頭發(fā)上栅受,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音恭朗,去河邊找鬼屏镊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冀墨,可吹牛的內(nèi)容都是我干的闸衫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼诽嘉,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蔚出!你這毒婦竟也來了弟翘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤骄酗,失蹤者是張志新(化名)和其女友劉穎稀余,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趋翻,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡睛琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踏烙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片师骗。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖讨惩,靈堂內(nèi)的尸體忽然破棺而出辟癌,到底是詐尸還是另有隱情,我是刑警寧澤荐捻,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布黍少,位于F島的核電站,受9級(jí)特大地震影響处面,放射性物質(zhì)發(fā)生泄漏厂置。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一魂角、第九天 我趴在偏房一處隱蔽的房頂上張望昵济。 院中可真熱鬧,春花似錦野揪、人聲如沸砸紊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沼溜,卻和暖如春平挑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背系草。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工通熄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人找都。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓唇辨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親能耻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赏枚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容