【问题标题】:ViewCompat.enableAccessibleClickableSpanSupport(textview) is not workingViewCompat.enableAccessibleClickableSpanSupport(textview) 不工作
【发布时间】:2020-02-13 21:08:36
【问题描述】:

我正在尝试ViewCompat.enableAccessibleClickableSpanSupport(textview),但 spannable 仍在使应用程序崩溃。我的方法是

// ViewCompat.enableAccessibleClickableSpanSupport(textview) 
val ss = SpannableString(someString)
ss.setSpan( bla bla bla) // i have a clickablespan with nocopyspan and imagespan
textview.text = ss
textview.movementMethod = LinkMovementMethod.getInstance()
ViewCompat.enableAccessibleClickableSpanSupport(textview)

我尝试将 ViewCompact 代码放在顶部和底部,顶部或底部各一个,但我的应用仍然在 Accessibility 或 Talkback 上崩溃。我在 Android 9 上运行该应用程序,但我认为它无论如何都会在所有设备中崩溃。任何人都有类似的经历,你如何处理这个?我可以使用 html 方式,但我需要 textview 的一部分是可点击的并导航到下一个片段。

【问题讨论】:

    标签: android kotlin crash accessibility talkback


    【解决方案1】:

    我相信 NoCopySpan 可能是您问题的根源。尝试从您的自定义 ClickableSpan 实现中删除它。不幸的是,您可能会处理使用 ClickableSpan 可能导致的内存泄漏。您还可以禁用该特定 TextView 的可访问性。看 https://developer.android.com/reference/android/view/View#setImportantForAccessibility(int)

    所以我认为你的选择是:

    1. 完全删除可点击范围的设置,只需将您的文本分成几个TextView,可点击的文本都在一个TextView中。 (缺点是创建了不必要的视图)
    2. 删除在您的自定义 ClickableSpan 实现中实现 NoCopySpan 接口(但存在 ClickableSpan 可能存在内存泄漏的风险)
    3. 继续实现 NoCopySpan,并应用您的自定义跨度,但调用 setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO) 或通过 XML 属性,但此 TextView 将不再支持可访问性。此外,不保证无障碍服务会遵守此属性设置。

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 1970-01-01
      • 2012-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多