Android:借用html标签协议,定义自己的协议
2017-07-02 22:27
537 查看
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); }
相关文章推荐
- 自己定义html中a标签的title提示tooltip
- android 自己定义标签的使用,实现扁平化UI设计
- android--解--它们的定义tabhost(动态添加的选项+用自己的主动性横向滑动标签+手势切换标签页和内容特征)
- 自己定义html中a标签的title提示tooltip
- 自己用的很少的html标签
- Android支持HTML标签
- Android TextView 支持的HTML标签
- 如何通过序列化在网络间传递对象,网络协议:轻松定义自己的网络通讯协议
- 轻松定义自己的网络通讯协议
- Android中常用适配器及定义自己的适配器
- android HTML 中实现列表效果以及html支持的标签
- 在C# ASP.NET中,要添加属性到控件中 在HTML页面获取控件中自己定义属性和值
- Android 资源文件 html 标签
- Android 如何自己定义控件的样式 Shape
- Android中常用适配器及定义自己的适配器
- Android应用开发笔记——打造自己的标签栏
- css 定义 html 页标签 没有的属性 超级好用 看了你就会明白了
- HTML格式的语法高亮类库代码,内置对C, C++, VBScript, JScript, xml的支持,可扩展,自己添加语法定义。
- 自己定义协议,从一个app打开另一个app
- Android TextView 支持的HTML标签