美文网首页
优化实践---文本样式支持服务端配置方案

优化实践---文本样式支持服务端配置方案

作者: 烧饼正努力 | 来源:发表于2017-12-17 22:10 被阅读72次

最近做到这样一个需求,服务端返回一段html文案,里面文字是部分可点击的,而且点击后需要跳转到h5页面。咋一听,感觉很简单呀,调用一下Html中的fromHtml方法不是分分钟解决了么。

初步尝试

以“<a href="www.baidu.com">百度<a>一下,你就<font color="#0099ff">知道</font>”为例:

出来的效果是这样的:

这里注意要给textView设置MovementMethod,如下所示:

textView.setMovementMethod(LinkMovementMethod.getInstance());

好了,现在百度两个字已经可以点击了,一点,确实可以跳转,不过跳到了系统自带的浏览器里。这里当然需要做一些处理,毕竟用户在你家App里用着用着,跳到系统的浏览器去了,势必会影响后面的流程。

直观的方案

那么这里该如何来处理呢,首先想到的一个方案就是,既然系统默认会跳转到自带的浏览器,那我们索性不用fromHtml方法了,直接将Html中的各个标签解析处理,再通过SpannableString设置对应处的点击事件和颜色颜色样式就好了。但是这样做的话开发成本很大,首先要做标签的解析,标签有平行的层级还有嵌套的层级,解析起来可就复杂了。

能否通过截获点击事件来做处理

上面讲到过,如果不给textView设置MoveMentMethod,那么html文本中的链接点击将不会生效,这时我们再给这个textView设置点击效果就好啦(跳转链接从html中用正则表达式解析出来),但这个方案有两个问题:1.现在文本是整个可点击了,而不是局部可点击(ui大佬要跑来和我撕b了);2.如果文本中有多个地方需要跳转不同链接这种方案也实现不了

寻找新思路

在搜索资料后发现,textView设置html样式时将点击样式解析成了URLSpan,而URLSpan设置的默认效果是打开系统浏览器。这个默认效果我暂时没想到方法修改,但是可以从这个URLSpan中获取链接,然后创建一个ClickableSpan来处理点击效果(这些Span是SpannableString中用来设置各种局部效果的),然后将原来的URLSpan效果去除,这样就可以自定义点击效果啦~

代码如下:

这里自定义了ClickableSpan,去除了默认的下滑线效果。

还有一个要注意的地方是textView必须设置MovementMethod,不然从textView中获取的文本就不是Spannable类型的,无法进行后续的处理。

好了,现在只要修改ClickableCallback接口的onClickableCallback方法的实现就可以自定义点击以后的逻辑啦,大功告成~

拿个例子测试一下:

<a href = "http://www.baidu.com/"><font color = "#ff6699">百度</font></a>......<a href = "http://www.soso.com/"><font color = "#0099ff">搜狗</font></a>

效果如下:

这样一来,文本内容、颜色和链接都可以由服务端控制啦,上线以后想调整就很方便了,不用再等客户端下次发版!

相关文章

  • 优化实践---文本样式支持服务端配置方案

    最近做到这样一个需求,服务端返回一段html文案,里面文字是部分可点击的,而且点击后需要跳转到h5页面。咋一听,感...

  • SSR中Webpack-Server-Config配置

    服务端webpack配置 服务端要正确处理首屏的图片和样式等 服务端要支持动态import,懒加载 webpack...

  • web 服务器nginx打开gzip压缩

    从服务端优化来说,通过对服务端做压缩配置可以大大减小文本文件的体积,从而使加载文本的速度成倍的加快。目前比较通用的...

  • Websocket:配置Nginx支持wss

    部署过程中遇到以下异常 服务端:socketIO目标:实现wss支持方案:配置Nginx ps: proxy_pa...

  • 被调用方解决

    被调用方解决 1、被调用方解决 – 支持跨域 (1)被调用方支持跨域解决方案 服务端实现 Nginx配置 Apac...

  • flutter文本样式 TextStyle 详解

    TextStyle 配置文本的显示样式 和 输入文本的样式 参考:http://www.360doc.com/co...

  • 来讲一下IE和火狐的不同之处

    (1)获取样式:IE支持currentStyle,Firefox支持getComputedStyle (2)文本:...

  • UITextView学习笔记

    UITextView UITextView,可滚动的多行文本区域。支持使用自定义样式信息显示文本,还支持文本编辑。...

  • ios 开发UI篇—UITextView

    概述 UITextView可滚动的多行文本区域 UITextView支持使用自定义样式信息显示文本,并支持文本编辑...

  • Electron-vue解决跨域

    方案一: 在.electron-vue/dev-runner.js文件配置代理 方案二: 服务端配置cros,前端...

网友评论

      本文标题:优化实践---文本样式支持服务端配置方案

      本文链接:https://www.haomeiwen.com/subject/yljywxtx.html