Android:借用html标签协议,定义自己的协议
来源:互联网 发布:mfc编程实例 2008 编辑:程序博客网 时间:2024/05/16 12:31
Android:借用html标签协议,定义自己的协议
背景
使用html,定制自己的标签协议:比如:
今日有好货,<a href="https://www.taobao.com">点我逛淘宝</a>,有惊喜!!
或者
今日有好货,<a href="page://taobao_home">点我逛淘宝</a>,有惊喜!!
当一个TextView显示上述内容时,还可以点击上面的文字,然后跳转到对应的页面。
解决思路
使用Html.fromHtml
对含有标签的文本进行解析,然后重新为其添加自定义的Span
... /** * 绑定解析的Html * * @param mContentTv 目标的TextView控件 * @param content 含有html标签的文本内容 */ private void bindContentView(final TextView mContentTv, final String content) throws Throwable { mContentTv.setMovementMethod(LinkMovementMethod.getInstance()); String text = mContentTv.getText().toString(); //解析html Spanned spanned = Html.fromHtml(content); //获取其中的URL链接的Span URLSpan[] spans = spanned.getSpans(0, content.length(), URLSpan.class); if (spans != null) { //转化为子类 SpannableStringBuilder spannableStringBuilder = (SpannableStringBuilder) spanned; for (URLSpan urlSpan : spans) { //获取span的起始位置 int start = spanned.getSpanStart(urlSpan); int end = spanned.getSpanEnd(urlSpan); int flag = spanned.getSpanFlags(urlSpan); //获取href的链接 final String pageName = urlSpan.getURL(); spannableStringBuilder.removeSpan(urlSpan); if (start > end || start < 0) { continue; } //设置点击事件 spannableStringBuilder.setSpan(new ColorClickableSpan() { @Override public void onClick(View view) { //to open the pageName here } }, start, end, flag); } mContentTv.setText(spannableStringBuilder); } else { mContentTv.setText(spanned); } mContentTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //to do } }); } ...
其中,我们也可以定制超链接部分的样式:
import android.text.TextPaint;import android.text.style.ClickableSpan;import android.view.View;/** * @version mochuan.zhb on 2013/3/3. * @Author Zheng Haibo * @Company Alibaba Group * @PersonalWebsite http://github.com/nuptboyzhb * @Description 去掉下滑线的点击span */public class FollowClickableSpan extends ClickableSpan {// extend ClickableSpan @Override public void onClick(View view) { } @Override public void updateDrawState(TextPaint ds) {// override updateDrawState ds.setUnderlineText(false); // set to false to remove underline ds.setColor(0xff009ff0); }}
同样的思路,我们可以对其他html标签进行解析,然后进行改造;比如:
你还有<font color="#f00">20</font>项代办事情
/** * 将所有的font前景色标签,进行颜色重置 * * @param content * @param colorValue * @return */ private CharSequence parseSpanResetColor(String content, int colorValue) { try { Spanned spanned = Html.fromHtml(content); SpannableStringBuilder spannableStringBuilder = (SpannableStringBuilder) spanned; ForegroundColorSpan[] spans = spanned.getSpans(0, content.length(), ForegroundColorSpan.class); if (spans.length > 0) { for (ForegroundColorSpan foregroundColorSpan : spans) { int start = spanned.getSpanStart(foregroundColorSpan); int end = spanned.getSpanEnd(foregroundColorSpan); int flag = spanned.getSpanFlags(foregroundColorSpan); spannableStringBuilder.removeSpan(foregroundColorSpan); spannableStringBuilder.setSpan(new ForegroundColorSpan(colorValue), start, end, flag); } } return spannableStringBuilder; } catch (Exception e) { e.printStackTrace(); } return new SpannableString(content); }
阅读全文
1 0
- Android:借用html标签协议,定义自己的协议
- 轻松定义自己的网络通讯协议
- 协议栈的定义
- HTTP协议的定义
- OC协议-正式协议的定义
- RFC3261 Definitions 协议的定义
- 协议的定义和实现
- Android 内部跳转URi协议的定义和实现方案
- 重新定义的html标签
- HTML的一些标签定义
- 如何通过序列化在网络间传递对象,网络协议:轻松定义自己的网络通讯协议
- 串口USART UART 接收结束标志是怎么回事 这是一种自己定义的协议 没有通用协议
- 注册自己的伪协议
- HTML协议
- 自己定义协议,从一个app打开另一个app
- TCP协议与UDP协议的定义与区别
- android的http协议
- Android的fastboot协议
- ViewPager的使用方法
- ImageView的平铺效果
- Python探索记(10)——字符串(下)
- 2.策略模式
- 如何在office word or ppt 中插入Latex公式
- Android:借用html标签协议,定义自己的协议
- Eclipse修改工作空间--配置必备
- JS-String对象的方法(上)
- hdu_round1-1003 yyf和女朋友玩游戏
- Web前端-HeadFirst笔记-CH10 span div 伪类
- 支持向量机通俗导论(理解SVM的三层境界)
- java拷贝
- Spark在不同集群中的运行演示
- 3.单一职责模式