有没有办法在Android上制作自定义Spannables?

时间:2012-10-21 09:01:50

标签: android linkify spannablestring spannable

在我的Android应用中,我有链接的文字视图。他们每个人都在切换一个特定的事件(打开浏览器,开始另一个活动等等)。为了解决这个问题,我没有找到比这样做更好的解决方案:

hi there!, this is <u>a action</u> and this is <b>another action</b>. This third one goes to <a href="http://google.com>Google</a>

然后,在显示textview时,我将每个链接转换为带有SpannableStringBuilder的自定义spannable。

我知道这很黑。这就是为什么我想知道是否还有其他更好的方法?

我有两个想法:

  • 是否可以使用自己的编组系统实现自定义spannable?例如,自定义的spannable匹配标记,如:

    <div class="foo"></div>

然后,FooClickableSpannable

自动检测到ClickableSpan fromHtml() {}}
  • 我可以使用自定义网址方案来打开我的活动但是我不知道如果还有其他选择,我怎么强迫它不显示应用选择器。

1 个答案:

答案 0 :(得分:1)

  

是否可以使用自己的编组系统实现自定义spannable?

您可以创建CharacterStyle的自定义子类,尤其是ClickableSpan吗?是。

我不知道“他们自己的编组系统”是什么意思。

  

我可以使用自定义网址方案来打开我的活动,但如果还有其他选择,我不知道如何强制它不显示应用选择器。

嗯,真正的自定义方案(例如,piel://而不是http://content://)不太可能提供选择器,因为不太可能有其他选择。< / p>

除此之外,我过去所做的是:

  • 使用Html.fromHtml()进行基本转换
  • 在结果上使用getSpans()查找所有URLSpan个对象
  • 通过URLSpanremoveSpan()
  • 将这些setSpan()个对象替换为需要的其他类型的自定义范围

另一种方法是为Html.fromHtml()创建一个类似于工作的方法。这是围绕我自己的TODO列表的较低级别,创建更具可扩展性,处理更多HTML构造等的东西。