TextView使用小技巧——一个TextView多重属性设置(SpannableStringBuilder)
来源:互联网 发布:qq宠物 知乎 编辑:程序博客网 时间:2024/05/18 02:00
前言
开发中我们经常会遇到这种情况,展示一条连贯的文字信息,比如一句话,但是这句话内容中有一部分属性可能跟其他部分不一致,比如字体大小、颜色或者点击事件与否。开始我们可能会想到使用多个TextView拼接,接触过的人都清楚,某些情况下或许可以,但很多情况下是行不通的,其中缘由不再细说。通过查阅,我们发现其实Android本身已经为我们的Text提供了这个功能,即一个TextView多重属性的设置功能。
举个栗子,我们有这么一个需求:欲知详情,请阅读《中华人民共和国中国共产党纪律处分条例第358章21条第5节》。要求这条内容连贯显示并将“《中华人民共和国中国共产党纪律处分条例第358章21条第5节》”显示为蓝色可点击,点击进入条例详情页面。
好了,废话不多说。
这里我们用一个TextView搞定,这里我们要用到一个类SpannableStringBuilder。我们看下官方解释:
/**
* This is the class for text whose content and markup can both be changed.
*/
翻译:这个类可以让一个文本的内容和标记改变属性。
TextView tv = new TextView();String strContent = "欲知详情,请阅读《中华人民共和国中国共产党纪律处分条例第358章21条第5节》";String strPart1 = "欲知详情,请阅读";SpannableStringBuilder ssb = new SpannableStringBuilder(strContent);ssb.setSpan(new ClickableSpan() { @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); //TODO 在这里设置被选中文字属性 ds.setColor(Color.BLUE); ds.setUnderlineText(false);//默认设置是有下划线的,所以我们要设置false去掉下划线 } @Override public void onClick(View widget) { // TODO 点击事件 Toast.makeText(MainActivity.this,"显示《中华人民共和国中国共产党纪律处分条例第358章21条第5节》",Toast.LENGTH_LONG).show(); }},strPart1.length(),strContent.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(ssb);tv.setMovementMethod(LinkMovementMethod.getInstance());
注意,最后一句(即setMoveMentMethod)一定要加上去,这是TextView上的一个方法,我们看下官方解释:
/**
* Sets the movement method (arrow key handler) to be used for
* this TextView. This can be null to disallow using the arrow keys
* to move the cursor or scroll the view.
*
* Be warned that if you want a TextView with a key listener or movement
* method not to be focusable, or if you want a TextView without a
* key listener or movement method to be focusable, you must call
* {@link #setFocusable} again after calling this to get the focusability
* back the way you want it.
*/
简单翻译一下就是说如果你对TextView设置了点击事件或者movement方法(这方法我也不清楚),就一定要调用这个方法来获取焦点,或者失去焦点。
这里我们对“《中华人民共和国中国共产党纪律处分条例第358章21条第5节》”这部分设置了点击事件,所以我们点击这部分时可以触发点击事件。
OK,最后看下效果图:
- TextView使用小技巧——一个TextView多重属性设置(SpannableStringBuilder)
- TextView之SpannableStringBuilder使用总结
- Android 使用SpannableStringBuilder设置TextView中的文字及图片
- TextView控件使用小技巧
- TextView使用一些小技巧
- textview使用的小技巧
- textview 设置SpannableStringBuilder实现点击事件
- Android小技巧——TextView的一些小技巧
- Android小技巧——TextView的一些小技巧
- 关于TextView与SpannableStringBuilder的使用
- 使用SpannableStringBuilder打造超炫酷的TextView
- TextView改变部分字体颜色——SpannableStringBuilder
- TextView 小技巧
- android textview小技巧
- TextView局部文字样式美化(SpannableStringBuilder)
- 自定义TextView属性和设置TextView属性
- 使用IB时设置textView属性崩溃
- TextView--属性设置
- mvn项目pom.xml写法(hadoop)
- LeetCode 438 Find All Anagrams in a String解析
- java面试题
- 【我的Java笔记】IO流_IO流中的其他类
- matlab三维绘图的一些学习
- TextView使用小技巧——一个TextView多重属性设置(SpannableStringBuilder)
- H5 直播避坑指南
- 第十三周LeetCode
- 服务器端通过websocket发送消息给,当多客户端登录分发时;一个客户端网络不好,所有的客户端都会阻塞?为何
- table添加圆角效果
- nilcms file类 简单文件缓存实现
- 唯快不破:linux下的epoll如何高效处理百万连接
- LeetCode--Word Break(分词)Python
- HttpClient超时设置详解