spannablestring 换行builder 在listview adapter中 卡吗

Android listView的上拉刷新(加载更多)
以前也实现过,ListView的上拉刷新,不过用的是开源代码,由于本人比较懒吧,也没怎么研究,所以现在写出来还不是那么流利。还好本人发现了自己的这些特点,所以写出来个Demo,基本实现了ListView的上拉说新,当做练习了,可能还不是那么完美,以后根据开源代码的研究,会写出更好的并且简单易懂的下拉说新Demo来发表。
实现效果图:
直接上代码吧:
MainActivity:
package com.
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import android.app.A
import android.graphics.C
import android.os.B
import android.util.L
import android.view.V
import android.widget.AbsListV
import android.widget.AbsListView.OnScrollL
import android.widget.LinearL
import android.widget.ListV
import android.widget.TextV
import android.widget.T
public class MainActivity extends Activity {
private ListView listV
private MyA
private List list = new ArrayList();
private List listAll = new ArrayList();
private Map map = new HashMap();
private boolean is_divP// 是否进行分页操作
private MyAdapter mA
private TextView tv_
private LinearL
private LinearLayout list_
// public static int pageNum = 1;// 设置pageNo的初始化值为1,即默认获取的是第一页的数据。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.listView1);
* 添加ListView的footer
list_footer = (LinearLayout) getLayoutInflater().inflate(
R.layout.list_footer, null);
list_footer.setBackgroundColor(Color.parseColor(#ffffff));
tv_msg = (TextView) list_footer.findViewById(R.id.tv_msg);// 更多
loading = (LinearLayout) list_footer.findViewById(R.id.loading);// 读取中+progressBar
tv_msg.setVisibility(View.GONE);
loading.setVisibility(View.VISIBLE);
listView.addFooterView(list_footer);
* listView中添加数据
initData();
* 将每页数据(list中每次存储的数据)添加到ListAll(存储所有的数据)中。
listAll.addAll(list);
adapter = new MyAdapter(this, listAll);
listView.setAdapter(adapter);
* listview的监听事件
listView.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
* 如果等到该分页(is_divPage = true)的时候,并且滑动停止(这个时候手已经离开了屏幕),自动加载更多。
if (is_divPage
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
Toast.makeText(MainActivity.this, 正在获取更多数据...,
Toast.LENGTH_SHORT).show();
Log.d(zhongyao, 调用onScrollStateChanged!!!!);
initData();
listAll.addAll(list);
adapter.notifyDataSetChanged();
tv_msg.setVisibility(View.INVISIBLE);
loading.setVisibility(View.VISIBLE);
} else if (!is_divPage
&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
tv_msg.setVisibility(View.VISIBLE);
loading.setVisibility(View.INVISIBLE);
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
is_divPage = (firstVisibleItem + visibleItemCount == totalItemCount);
private void initData() {
list.clear();
for (int i = 0; i & 10; i++) {
list.add(zhongyao
MyAdapter:
package com.
import java.util.ArrayL
import java.util.L
import java.util.M
import android.content.C
import android.util.L
import android.view.LayoutI
import android.view.V
import android.view.View.OnClickL
import android.view.ViewG
import android.widget.BaseA
import android.widget.TextV
import android.widget.T
* @author Administrator
public class MyAdapter extends BaseAdapter {
private List list = new ArrayList();
public MyAdapter(Context contex, List list) {
this.context =
this.list =
public int getCount() {
return list.size();
public Object getItem(int position) {
return list.get(position);
public long getItemId(int position) {
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder =
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.list_item, null);
holder.tv_name = (TextView) convertView
.findViewById(R.id.textView1);
convertView.setTag(holder);
holder = (ViewHolder) convertView.getTag();
holder.tv_name.setText(list.get(position));
convertView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(context, 您的选择是: + position, 1).show();
return convertV
class ViewHolder {
private TextView tv_name, tv_
布局文件:
activity_main:
list_item;
list_footer:下次自动登录
现在的位置:
& 综合 & 正文
利用 SpannableStringBuilder 改变textview中字体的颜色
TextView textview = (TextView) findViewById(R.id.color_text);
//声明一个字符串变量
String str="君不见黄河之水天上来";
SpannableStringBuilder style=new SpannableStringBuilder(str);
//从第2到第4个字符
颜色为红色
style.setSpan(new ForegroundColorSpan(Color.RED), 1, 4, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
//从第6到第7个字符
颜色为绿色
style.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 7, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
textview.setText(style);
&&&&推荐文章:
【上篇】【下篇】在EditText中插入表情图片 (CharacterStyle&SpannableString) - 短裤党 - ITeye技术网站
博客分类:
EditText通常用于显示文字,但有时候也需要在文字中夹杂一些图片,比如QQ中就可以使用表情图片,又比如需要的文字高亮显示等等,如何在android中也做到这样呢?
记得android中有个android.text包,这里提供了对文本的强大的处理功能。
添加图片主要用SpannableString和ImageSpan类:
Drawable drawable = getResources().getDrawable(id);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
//需要处理的文本,[smile]是需要被替代的文本
SpannableString spannable = new SpannableString(getText().toString()+"[smile]");
//要让图片替代指定的文字就要用ImageSpan
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
//开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)
//最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12
spannable.setSpan(span, getText().length(),getText().length()+"[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
setText(spannable);
将需要的文字高亮显示:
public void highlight(int start,int end){
SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());//用于可变字符串
ForegroundColorSpan span=new ForegroundColorSpan(Color.RED);
spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(spannable);
加下划线:
public void underline(int start,int end){
SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());
CharacterStyle span=new UnderlineSpan();
spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(spannable);
组合运用:
SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());
CharacterStyle span_1=new StyleSpan(android.graphics.Typeface.ITALIC);
CharacterStyle span_2=new ForegroundColorSpan(Color.RED);
spannable.setSpan(span_1, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(span_2, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(spannable);
* 带有\n换行符的字符串都可以用此方法显示2种颜色
* @param text
* @param color1
* @param color2
public SpannableStringBuilder highlight(String text,int color1,int color2,int fontSize){
SpannableStringBuilder spannable=new SpannableStringBuilder(text);//用于可变字符串
CharacterStyle span_0=null,span_1=null,span_2;
int end=text.indexOf("\n");
if(end==-1){//如果没有换行符就使用第一种颜色显示
span_0=new ForegroundColorSpan(color1);
spannable.setSpan(span_0, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
span_0=new ForegroundColorSpan(color1);
span_1=new ForegroundColorSpan(color2);
spannable.setSpan(span_0, 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(span_1, end+1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
span_2=new AbsoluteSizeSpan(fontSize);//字体大小
spannable.setSpan(span_2, end+1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
以上实际都是Html.fromHtml(html)的代码实现形式。
另外有个问题:如何让一个TextView中的关键字高亮显示?
解决如下:
* 关键字高亮显示
* @param target 需要高亮的关键字
public void highlight(String target){
String temp=getText().toString();
SpannableStringBuilder spannable = new SpannableStringBuilder(temp);
CharacterStyle span=
Pattern p = pile(target);
Matcher m = p.matcher(temp);
while (m.find()) {
span = new ForegroundColorSpan(Color.RED);//需要重复!
spannable.setSpan(span, m.start(), m.end(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(spannable);
循环太慢,不知道有没有简单高效的方法?
下面给出一个类,专门用于将指定的文字转换成表情显示,当然使用前表情图片需要先导入drawable,另外表情图片的数量需要和数组定义的长度一致!否则抛参数异常。
import android.content.C
import android.text.S
import android.text.SpannableStringB
import android.text.style.ImageS
import android.util.L
import java.util.HashM
import java.util.regex.M
import java.util.regex.P
public class SmileyParser {
private Context mC
private String[] mSmileyT
private Pattern mP
private HashMap&String, Integer& mSmileyToR
public static final int[] DEFAULT_SMILEY_RES_IDS = {
R.drawable.aini,
R.drawable.aoteman,
R.drawable.baibai,
R.drawable.baobao,
R.drawable.beiju,
R.drawable.beishang,
R.drawable.bianbian,
R.drawable.bishi,
R.drawable.bizui,
R.drawable.buyao,
R.drawable.chanzui,
public SmileyParser(Context context) {
mContext =
mSmileyTexts = mContext.getResources().getStringArray(DEFAULT_SMILEY_TEXTS);
mSmileyToRes = buildSmileyToRes();
mPattern = buildPattern();
public static final int DEFAULT_SMILEY_TEXTS = R.array.default_smiley_
private HashMap&String, Integer& buildSmileyToRes() {
if (DEFAULT_SMILEY_RES_IDS.length != mSmileyTexts.length) {
Log.w("SmileyParser", "Smiley resource ID/text mismatch");
//表情的数量需要和数组定义的长度一致!
throw new IllegalStateException("Smiley resource ID/text mismatch");
HashMap&String, Integer& smileyToRes = new HashMap&String, Integer&(mSmileyTexts.length);
for (int i = 0; i & mSmileyTexts. i++) {
smileyToRes.put(mSmileyTexts[i], DEFAULT_SMILEY_RES_IDS[i]);
return smileyToR
//构建正则表达式
private Pattern buildPattern() {
StringBuilder patternString = new StringBuilder(mSmileyTexts.length * 3);
patternString.append('(');
for (String s : mSmileyTexts) {
patternString.append(Pattern.quote(s));
patternString.append('|');
patternString.replace(patternString.length() - 1, patternString.length(), ")");
pile(patternString.toString());
//根据文本替换成图片
public CharSequence replace(CharSequence text) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
Matcher matcher = mPattern.matcher(text);
while (matcher.find()) {
int resId = mSmileyToRes.get(matcher.group());
builder.setSpan(new ImageSpan(mContext, resId),matcher.start(), matcher.end(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
在res/arrays.xml中添加数组:
&?xml version="1.0" encoding="UTF-8"?&
&resources xmlns:android="/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&
&string-array name="default_smiley_texts"&
&item &[爱你]&/item&
&item &[机器人]&/item&
&item &[拜拜]&/item&
&item &[抱抱]&/item&
&item &[悲剧]&/item&
&item &[悲伤]&/item&
&item &[便便]&/item&
&item &[鄙视]&/item&
&item &[闭嘴]&/item&
&item &[不要]&/item&
&item &[馋嘴]&/item&
&/string-array&
&/resources&
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tvShow = (TextView) findViewById(R.id.tvShow);
TextView tvSource = (TextView) findViewById(R.id.tvSource);
SmileyParser parser = new SmileyParser(this);
String text = "[鄙视][爱你][便便][馋嘴][机器人]";
tvSource.setText("原文:"+text);
tvShow.setText(parser.replace("SmileyParser类处理后:"+text));
付继承关系:
扩展学习:
android开发:TextView中显示HTML和图片
最近有人咨询我如何在TextView中显示&img src=""/& html标签内的图片,大家都知道,在TextView中显示HTML内容的方法如下所示:
TextView description=(TextView)findViewById(R.id.description);
description.setText(Html.fromHtml(htmlStr));
如果HTML中有图片的话,显示出来的图片会被一个小框取代,那么怎么样才能看到图片呢?查看了一下API,android.text.Html还还有另一个方法:Html.fromHtml(String source,ImageGetter imageGetter,TagHandler tagHandler),这个方法使用如下所示:
//&img src='http://XXX.png' /&的情况
ImageGetter imgGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
Drawable drawable =
Log.d("Image Path", source);
url = new URL(source);
drawable = Drawable.createFromStream(url.openStream(), "");
} catch (Exception e) {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
TextView description=(TextView)findViewById(R.id.description);
description.setText(Html.fromHtml(htmlStr,imgGetter,null));
如果图片在该工程的res/drawable下,那么可以使用下面这种:
//&img src='" + R.drawable.icon + "' /&的情况
ImageGetter imgGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
int id = Integer.parseInt(source);
Drawable drawable = getResources().getDrawable(id);
//int height = fontH;
//int width = (int) ((float) drawable.getIntrinsicWidth() / (float) drawable.getIntrinsicHeight()) * fontH;
//drawable.setBounds(0, 0, width, height);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
怎么样?很简单,第二个参数TagHandler是干什么的呢?从名称我们就知道是处理HTML中的标签的,比如说遇到某个标签就把它替换为….之类的操作都可以通过TagHandler来处理,呵呵,我可没试过哦,瞎猜的,程序员一定要发挥充分的想像力,自己去试一下吧!
最后我要说的是,如果你的图片是从网络上获取的,那么你一定不要用这种方法显示一张图片,因为这是最垃圾的办法,你的程序会经常被卡死。
那么有没有更好的方法呢?也许不是最好,但我建议您可以使用WebView来显示HTML内容。
(117.2 KB)
下载次数: 526
浏览 23607
gundumw100
浏览: 3032033 次
来自: 上海
下面这行代码。 如果lazyScrollview里含有 水平滑 ...
不错的东东!!!!
yyclang 写道 汗,你把EmptyLayout放到跟Sw ...
为什么把activity换成Fragment 就不显示了啊
来个截图吧一、概述1、SpannableString、SpannableStringBuilder与String的关系首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。所以,总而言之,SpannableString、SpannableStringBuilder与String一样,&首先也是传字符串,但SpannableString、SpannableStringBuilder可以对这些字符串添加额外的样式信息,但String则不行。注意:如果这些额外信息能被所用的方式支持,比如将SpannableString传给TextView;也有对这些额外信息不支持的,比如前一章讲到的Canvas绘制文字,对于不支持的情况,SpannableString和SpannableStringBuilder就是退化为String类型,直接显示原来的String字符串,而不会再显示这些附加的额外信息。2、SpannableString与SpannableStringBuilder区别它们的区别在于 SpannableString像一个String一样,构造对象的时候传入一个String,之后再无法更改String的内容,也无法拼接多个 SpannableString;而SpannableStringBuilder则更像是StringBuilder,它可以通过其append()方法来拼接多个String:[java]&view plaincopy//使用SpannableString,必须一次传入,构造完成&&SpannableString&word&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&//使用SpannableStringBuilder,可以使用append()再添加&&SpannableStringBuilder&multiWord&=&new&SpannableStringBuilder();&&multiWord.append(&欢迎光临&);&&multiWord.append(&Harvic的&);&&multiWord.append(&博客&);&&(转自博客:《android%20-%20SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替》)因为Spannable等最终都实现了CharSequence接口,所以可以直接把SpannableString和SpannableStringBuilder通过TextView.setText()设置给TextView。3、SetSpan()void%20setSpan%20(Object%20what,%20int%20start,%20int%20end,%20int%20flags)函数意义:给SpannableString或SpannableStringBuilder特定范围的字符串设定Span样式,可以设置多个(比如同时加上下划线和删除线等),Falg参数标识了当在所标记范围前和标记范围后紧贴着插入新字符时的动作,即是否对新插入的字符应用同样的样式。(这个后面会具体举例说明)参数说明:object%20what%20:对应的各种Span,后面会提到;int%20start:开始应用指定Span的位置,索引从0开始int%20end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。int%20flags:取值有如下四个Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式&Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括。Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。举个例子来说明这个前后包括的问题:由于Flag的作用是用来指定范围前后输入新的字符时,会不会应用效果的,所以我们利用EditText来显示SpannableString(1)、布局XML中加入一个EditText控件:[html]&view%20plaincopy&RelativeLayout&xmlns:android=&/apk/res/android&&&&&&&xmlns:tools=&/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)、这里用一个改变字体颜色的Span来做下演示[java]&view%20plaincopypublic&class&MainActivity&extends&Activity&{&&&&&&&&&&&&private&EditText&editT&&&&&&&&@Override&&&&&&protected&void&onCreate(Bundle&savedInstanceState)&{&&&&&&&&&&super.onCreate(savedInstanceState);&&&&&&&&&&setContentView(R.layout.activity_main);&&&&&&&&&&&&&&&&&&&&editText&=&(EditText)findViewById(R.id.edit);&&&&&&&&&&&&&&&&&&&&//改变字体颜色&&&&&&&&&&//先构造SpannableString&&&&&&&&&&SpannableString&spanString&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&&&&&&&&//再构造一个改变字体颜色的Span&&&&&&&&&&ForegroundColorSpan&span&=&new&ForegroundColorSpan(Color.BLUE);&&&&&&&&&&&&//将这个Span应用于指定范围的字体&&&&&&&&&&spanString.setSpan(span,&1,&3,&Spannable.SPAN_EXCLUSIVE_INCLUSIVE);&&&&&&&&&&&&//设置给EditText显示出来&&&&&&&&&&editText.setText(spanString);&&&&&&}&&}&&初始化效果是这样的:分别在设置Span的前面和后面加入新文字,结果是这样的在前面和后面都加入虾米两个字,可见,前面的虾米没有任何效果,后面的则不同,添加上相同的Span特效,这是由于我们设置了Spannable.SPAN_EXCLUSIVE_INCLUSIVE的原因,即(前面不应用特效,后面应用特效),其它几个Flags参数的含义想必大家也都清楚了。在此就不再赘述。二、各种Span设置在前面的一个小示例,大家应该也可以看出,要应用一个Span总共分三步:1、构造String2、构造Span3、利用SetSpan()对指定范围的String应用这个Span1、字体颜色设置(ForegroundColorSpan)[java]&view%20plaincopySpannableString&spanString&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&//再构造一个改变字体颜色的Span&&ForegroundColorSpan&span&=&new&ForegroundColorSpan(Color.BLUE);&&&&//将这个Span应用于指定范围的字体&&spanString.setSpan(span,&1,&5,&Spannable.SPAN_EXCLUSIVE_INCLUSIVE);&&&&//设置给EditText显示出来&&editText.setText(spanString);&&效果:2、字体背景颜色(BackgroundColorSpan)[java]&view%20plaincopySpannableString&spanString&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&BackgroundColorSpan&span&=&new&BackgroundColorSpan(Color.YELLOW);&&&&spanString.setSpan(span,&0,&3,&Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);&&&&editText.setText(spanString);&&&&3、字体大小(AbsoluteSizeSpan)[java]&view%20plaincopySpannableString&spanString&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&AbsoluteSizeSpan&span&=&new&AbsoluteSizeSpan(16);&&&&spanString.setSpan(span,&2,&5,&Spannable.SPAN_INCLUSIVE_INCLUSIVE);&&&&editText.setText(spanString);&&&4、粗体、斜体(StyleSpan)[java]&view%20plaincopySpannableString&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)[java]&view%20plaincopySpannableString&spanString&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&StrikethroughSpan&span&=&new&StrikethroughSpan();&&&&spanString.setSpan(span,&2,&5,&Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);&&&&editText.setText(spanString);&&&6、下划线(UnderlineSpan)[java]&view%20plaincopySpannableString&spanString&=&new&SpannableString(&欢迎光临Harvic的博客&);&&&&UnderlineSpan&span&=&new&UnderlineSpan();&&&&spanString.setSpan(span,&1,&4,&Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);&&&&editText.setText(spanString);&&&7、图片置换(ImageSpan)ImagSpan有很多构造函数,一般是通过传入Drawableg来构造,详细的构造说明看这里:/reference/android/text/style/ImageSpan.html[java]&view%20plaincopySpannableString&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);&&&这个函数的不同之处在于,前几都是在原来文字的基础上加上特效,而这里却是利用图片将文字替换。如果遇到不支持显示图片的函数,比如前一篇中的canvas绘图。就会退化成String,即以原来的String字符串来显示。本篇文章所涉及到图片及工程下载地址:http://download.csdn.net/detail/harvic4761请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/&谢谢!
无相关信息}

我要回帖

更多关于 spannablestring 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信