原文地址:http://www.cnblogs.com/kross/p/3645594.html

以前一直好奇QQ的输入框里面是如何出现表情的,今天看了下这个,心中发出“原来是这样啊”的感叹。

通常情况下,我们都是使用字符串类型的变量,直接放置在TextView.setText()的参数里面的。这样只能单纯的输出字符串。如果要给TextView加上特殊的文本效果,就要使用SpannableString这个类了。

用法如下:

new一个SpannableString对象,将要显示的字符串作为构造方法的参数传入。

调用SpannableString.setSpan(Object, int, int, int)方法进行设置。第一个参数为需要设定的样式,有很多个类可以选择,都在这里啦:http://developer.android.com/reference/android/text/style/CharacterStyle.html

官方文档上面那里的直接子类和间接子类都是可以用的样式。

第二参数是开始的位置,0表示第一个字符

第三个参数是结束的位置

第四个参数是一个表示替换的位置是否会影响开头和结尾,诶……我试了下发现没什么变化呢……

然后就是把这个SpannableString对象传给TextView.setText()方法的参数就好了。

代码如下:

public class MainActivity extends Activity {

    private TextView tvTest = null;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tvTest = (TextView)findViewById(R.id.tv_test); SpannableString ss = new SpannableString("abcdefg"); //前景色
//ss.setSpan(new ForegroundColorSpan(Color.BLUE), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //背景色
//ss.setSpan(new BackgroundColorSpan(Color.RED), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //可点击触发事件
//ss.setSpan(new TextClickSpan(), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//触发事件的话,要加上下面这句话
//tvTest.setMovementMethod(LinkMovementMethod.getInstance()); //下划线
//ss.setSpan(new UnderlineSpan(), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //放置图片
ss.setSpan(new ImageSpan(this, R.drawable.ic_launcher), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); tvTest.setText(ss);
} class TextClickSpan extends ClickableSpan { @Override
public void onClick(View widget) {
Log.i("clickable span", "click");
Toast.makeText(MainActivity.this, "aaaa", Toast.LENGTH_SHORT).show();
}
}
}

其实这个感觉就像是那种替换一样~

原文地址:http://www.cnblogs.com/kross/p/3645594.html

新浪微博:http://weibo.com/KrossFord

SpannableString的基本用法的更多相关文章

  1. [转]Android学习:EditText的使用方法

        EditText是在Android开发中经常被使用到的控件,主要用来获取用户的输入内容.   1.EditText常用属性   EditText继承自TextView,所以EditText也拥 ...

  2. SpannableString使用详解

    TextView算是android开发中最最常用的控件了,有的时候,我们要给一个TextView中的显示的文字设置不同的样式或者响应事件,比如同一个TextView中,有的字是红色,有的字是蓝色,有的 ...

  3. Android spannableStringBuilder用法整理

    Android spannableStringBuilder用法整理 分类: Android开发2013-11-29 10:58 5009人阅读 评论(0) 收藏 举报 Androidspannabl ...

  4. 我的Android进阶之旅------>Android关于ImageSpan和SpannableString的初步了解

    最近要实现一个类似QQ聊天输入框,在输入框中可以同时输入文字和表情图像的功能.如下图所示的效果: 为了实现这个效果,先去了解了一下ImageSpan和SpannableString的用法.下面用一个小 ...

  5. SpannableStringBuilder 用法浅析以及仿陌陌表情

    SpannableStringBuilder  官方文档解释:这个类可以使文本的内容和标记都可以改变.当我们要为TextView或者Edittext里面的文字加入加入一些效果,如下划线,颜色标 识,超 ...

  6. 转 android design library提供的TabLayout的用法

    原文出处:http://chenfuduo.me/2015/07/30/TabLayout-of-design-support-library/ 在开发中,我们常常需要ViewPager结合Fragm ...

  7. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  8. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  9. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

随机推荐

  1. 前端- css - 总结

    1.css层叠样式表 1.什么是CSS? CSS是指层叠样式表(Cascading Style Sheets),样式定义如何显示HTML元素,样式通常又会存在于样式表中. 也就是说把HTML元素的样式 ...

  2. 提交到开源git时出现:fatal: refusing to merge unrelated histories的解决办法

    解决办法   创建本地库和fetch远程分支这些前面的步骤这里略过.可以自行百度. 解决办法: 1.cmd进入项目的根目录. 2.执行下面的命令:git pull origin master --al ...

  3. P4048 [JSOI2010]冷冻波

    出题人你tm搞笑呢,冰霜新星翻成冷冻波,而且tm就只能打一只小精灵???巫妖王都想来砍死你 首先要搞出每个巫妖能不能打到每一个小精灵,然后二分时间,就能算出每个巫妖可以打的次数,网络流check即可 ...

  4. AJAX其实就是一个异步网络请求

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML).其实就是一个异步网络请求. 一.创建对象 var xmlhttp; if (w ...

  5. python之GIL(Global Interpreter Lock)

    一 介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple nati ...

  6. 菜鸟vimer成长记——第2.4章、cmd-line模式

    cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和S ...

  7. this四种绑定方式之间的奇淫技巧

    写在前面 上一篇中,我们对于JavaScript中原始值.复杂值以及内存空间进行了一个深入浅出的总结,这次我们来聊一聊JavaScript中this关键字的深入浅出的用法. 在 JavaScript ...

  8. JavaScript——引用类型之数组

    前言 之前本菜打算在写完基本类型后写引用类型Object的,因为Object是引用类型的基础,其他的引用类型也是以Object为根本.只是关于对象的基本认识与简单操作确实可写的不多,打算之后与原型.原 ...

  9. VRRP+tunnel+IP SLA+Track实现冗余切换

    IP SLA(Internet Protocol Service-Level Agreement)互联网服务等级协议,本实验里通过发送测试报文,测试下一跳是否可达,结合Track实现冗余静态路由的切换 ...

  10. [硬件配置]Ubuntu 16.04下使用NETGEAR Nighthawk AC1900 (A7000) WIFi USB适配器

    为了增强无人机与地面站之间的传输信号,组里买了这款WiFi信号接收器,无奈只有Windows和Mac OS版本的驱动程序.后来不知道从哪里得来的一个偏方可以安装Ubuntu下的驱动,特此记录. 内核降 ...