欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpannableString與SpannableStringBuilder在Android中作用是什么

SpannableString與SpannableStringBuilder在Android中作用是什么?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為榆林企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),榆林網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

一、概述

1、SpannableString、SpannableStringBuilder與String的關(guān)系

首先SpannableString、SpannableStringBuilder基本上與String差不多,也是用來存儲(chǔ)字符串,但它們倆的特殊就在于有一個(gè)SetSpan()函數(shù),能給這些存儲(chǔ)的String添加各種格式或者稱樣式(Span),將原來的String以不同的樣式顯示出來,比如在原來String上加下劃線、加背景色、改變字體顏色、用圖片把指定的文字給替換掉,等等。所以,總而言之,SpannableString、SpannableStringBuilder與String一樣, 首先也是傳字符串,但SpannableString、SpannableStringBuilder可以對(duì)這些字符串添加額外的樣式信息,但String則不行。

注意:如果這些額外信息能被所用的方式支持,比如將SpannableString傳給TextView;也有對(duì)這些額外信息不支持的,比如前一章講到的Canvas繪制文字,對(duì)于不支持的情況,SpannableString和SpannableStringBuilder就是退化為String類型,直接顯示原來的String字符串,而不會(huì)再顯示這些附加的額外信息。

2、SpannableString與SpannableStringBuilder區(qū)別

它們的區(qū)別在于 SpannableString像一個(gè)String一樣,構(gòu)造對(duì)象的時(shí)候傳入一個(gè)String,之后再無法更改String的內(nèi)容,也無法拼接多個(gè) SpannableString;而SpannableStringBuilder則更像是StringBuilder,它可以通過其append()方法來拼接多個(gè)String:

//使用SpannableString,必須一次傳入,構(gòu)造完成 
SpannableString word = new SpannableString("歡迎光臨Harvic的博客"); 
 
//使用SpannableStringBuilder,可以使用append()再添加 
SpannableStringBuilder multiWord = new SpannableStringBuilder(); 
multiWord.append("歡迎光臨"); 
multiWord.append("Harvic的"); 
multiWord.append("博客");

SpannableString與SpannableStringBuilder在Android中作用是什么

(轉(zhuǎn)自博客:《android - SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替》)

因?yàn)镾pannable等最終都實(shí)現(xiàn)了CharSequence接口,所以可以直接把SpannableString和SpannableStringBuilder通過TextView.setText()設(shè)置給TextView。

3、SetSpan()

void setSpan (Object what, int start, int end, int flags)

函數(shù)意義:給SpannableString或SpannableStringBuilder特定范圍的字符串設(shè)定Span樣式,可以設(shè)置多個(gè)(比如同時(shí)加上下劃線和刪除線等),F(xiàn)alg參數(shù)標(biāo)識(shí)了當(dāng)在所標(biāo)記范圍前和標(biāo)記范圍后緊貼著插入新字符時(shí)的動(dòng)作,即是否對(duì)新插入的字符應(yīng)用同樣的樣式。(這個(gè)后面會(huì)具體舉例說明)

參數(shù)說明:

  • object what :對(duì)應(yīng)的各種Span,后面會(huì)提到;

  • int start:開始應(yīng)用指定Span的位置,索引從0開始

  • int end:結(jié)束應(yīng)用指定Span的位置,特效并不包括這個(gè)位置。比如如果這里數(shù)為3(即第4個(gè)字符),第4個(gè)字符不會(huì)有任何特效。從下面的例子也可以看出來。

int flags:取值有如下四個(gè)

  • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范圍的前面和后面插入新字符都不會(huì)應(yīng)用新樣式 

  • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即僅在范圍字符的后面插入新字符時(shí)會(huì)應(yīng)用新樣式

  • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括。

  • Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。

舉個(gè)例子來說明這個(gè)前后包括的問題:

由于Flag的作用是用來指定范圍前后輸入新的字符時(shí),會(huì)不會(huì)應(yīng)用效果的,所以我們利用EditText來顯示SpannableString

(1)、布局XML中加入一個(gè)EditText控件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 xmlns:tools="http://schemas.android.com/tools" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 tools:context="com.example.try_spannable_blog.MainActivity" > 
 
 <EditText 
 android:id="@+id/edit" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" /> 
 
</RelativeLayout>

(2)、這里用一個(gè)改變字體顏色的Span來做下演示

public class MainActivity extends Activity { 
 
 private EditText editText; 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 
 editText = (EditText)findViewById(R.id.edit); 
 
 //改變字體顏色 
 //先構(gòu)造SpannableString 
 SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
 //再構(gòu)造一個(gè)改變字體顏色的Span 
 ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE); 
 //將這個(gè)Span應(yīng)用于指定范圍的字體 
 spanString.setSpan(span, 1, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 
 //設(shè)置給EditText顯示出來 
 editText.setText(spanString); 
 } 
}

在前面和后面都加入蝦米兩個(gè)字,可見,前面的蝦米沒有任何效果,后面的則不同,添加上相同的Span特效,這是由于我們?cè)O(shè)置了Spannable.SPAN_EXCLUSIVE_INCLUSIVE的原因,即(前面不應(yīng)用特效,后面應(yīng)用特效),其它幾個(gè)Flags參數(shù)的含義想必大家也都清楚了。在此就不再贅述。

二、各種Span設(shè)置

在前面的一個(gè)小示例,大家應(yīng)該也可以看出,要應(yīng)用一個(gè)Span總共分三步:

      1、構(gòu)造String

      2、構(gòu)造Span
      3、利用SetSpan()對(duì)指定范圍的String應(yīng)用這個(gè)Span

1、字體顏色設(shè)置(ForegroundColorSpan)

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
//再構(gòu)造一個(gè)改變字體顏色的Span 
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE); 
//將這個(gè)Span應(yīng)用于指定范圍的字體 
spanString.setSpan(span, 1, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 
//設(shè)置給EditText顯示出來 
editText.setText(spanString);

效果:

、字體背景顏色(BackgroundColorSpan)

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW); 
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
editText.setText(spanString);

3、字體大小(AbsoluteSizeSpan)

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
AbsoluteSizeSpan span = new AbsoluteSizeSpan(16); 
spanString.setSpan(span, 2, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
editText.setText(spanString);

4、粗體、斜體(StyleSpan)

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC); 
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
editText.setText(spanString);

5、刪除線(StrikethroughSpan)

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
StrikethroughSpan span = new StrikethroughSpan(); 
spanString.setSpan(span, 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
editText.setText(spanString);

6、下劃線(UnderlineSpan)

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
UnderlineSpan span = new UnderlineSpan(); 
spanString.setSpan(span, 1, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
editText.setText(spanString);

7、圖片置換(ImageSpan)

ImagSpan有很多構(gòu)造函數(shù),一般是通過傳入Drawableg來構(gòu)造

SpannableString spanString = new SpannableString("歡迎光臨Harvic的博客"); 
Drawable d = getResources().getDrawable(R.drawable.ic_launcher); 
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); 
spanString.setSpan(span, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
editText.setText(spanString);

這個(gè)函數(shù)的不同之處在于,前幾都是在原來文字的基礎(chǔ)上加上特效,而這里卻是利用圖片將文字替換。如果遇到不支持顯示圖片的函數(shù),比如前一篇中的canvas繪圖。就會(huì)退化成String,即以原來的String字符串來顯示。

看完上述內(nèi)容,你們掌握SpannableString與SpannableStringBuilder在Android中作用是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文標(biāo)題:SpannableString與SpannableStringBuilder在Android中作用是什么
標(biāo)題路徑:http://chinadenli.net/article32/joeisc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、、全網(wǎng)營銷推廣、網(wǎng)站導(dǎo)航、網(wǎng)站改版、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
好吊一区二区三区在线看| 香蕉尹人视频在线精品| av在线免费播放一区二区| 国产成人精品午夜福利av免费| 丝袜av一区二区三区四区五区| 中文字幕乱码一区二区三区四区| 欧美日韩中黄片免费看| 中文字幕人妻综合一区二区| 夜夜嗨激情五月天精品| 欧美国产在线观看精品| 高跟丝袜av在线一区二区三区| 成人国产激情福利久久| 老司机亚洲精品一区二区| 国产一二三区不卡视频| 国产传媒高清视频在线| 国产不卡的视频在线观看| 台湾综合熟女一区二区| 国产一区在线免费国产一区| 狠狠干狠狠操在线播放| 高清不卡视频在线观看| 日韩欧美三级视频在线| 成年女人午夜在线视频| 日韩中文字幕视频在线高清版| 久久国产人妻一区二区免费| 日韩精品在线观看一区| 成人午夜激情在线免费观看| 亚洲国产精品av在线观看| 99久久免费中文字幕| 亚洲淫片一区二区三区| 欧美日韩精品一区二区三区不卡| 日本高清加勒比免费在线| 五月婷婷综合激情啪啪| 年轻女房东2中文字幕| 黄色美女日本的美女日人| 亚洲欧美日韩在线中文字幕| 少妇成人精品一区二区| 国产一区二区三区丝袜不卡| 国产精品午夜小视频观看| 国产av乱了乱了一区二区三区| 久久99精品日韩人妻| 人妻熟女中文字幕在线|