本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Better-Link-Movement-Method是一个Android开源库, 用于提升TextView中可点击链接的探测, 高亮和响应.
视频效果:
android:autoLink和Linkify.addLinks用于向TextView中添加链接, Android使用类LinkMovementMethod在链接获取焦点的时候来高亮链接, 并且在链接被点击的时候分发Intent.
BetterLinkMovementMethod在LinkMovementMethod的基础之上, 通过修复以下缺陷进行提升:
Usage
BetterLinkMovementMethod设计用来作为LinkMovementMethod的临时替换:
首先, 在工程或者模块的build.gradle文件中添加依赖:
dependencies {
implementation 'me.saket:better-link-movement-method:2.2.0'
}
其次, 设置TextView#movementMethod:
val textView = findViewById(...)
Linkify.addLinks(textView, Linkify.ALL)
textView.movementMethod = BetterLinkMovementMethod.getInstance()
最后, 点击监听器的设置, 可以通过对每个TextView的独一无二的BetterLinkMovementMethod实例注册监听器:
textView.movementMethod = BetterLinkMovementMethod.newInstance().apply {
setOnLinkClickListener { textView, url ->
// Handle click or return false to let the framework handle this link.
true
}
setOnLinkLongClickListener { textView, url ->
// Handle long-click or return false to let the framework handle this link.
true
}
What's Linkify
Linkify接收文本和正则表达式, 将文本中所有匹配到的内容转化为可点击链接. 这在匹配像邮箱地址, 网页URL时尤其有用, 且将它们有响应. 除了要匹配的模式之外, URL scheme前缀也是需要的. 当创建可单击的URL时,任何不以提供的scheme开始的模式匹配都将在匹配文本前添加scheme. 例如, 如果你在匹配网页URL, 你将提供scheme http://. 在可点击URL创建的时候, 如果模式匹配了example.com, 它并没有URL scheme 前缀, 提供的scheme将会被添加到前面, 从而创建了example.com.
Linkify常量:
Linkify.WEB_URLS: 位字段,表示在采用选项掩码的方法中应匹配网页URL.Linkify.EMAIL_ADDRESSES: 位字段,表示在采用选项掩码的方法中应匹配电子邮件地址Linkify.PHONE_NUMBERS: 位字段,表示在采用选项掩码的方法中应匹配电话号码.Linkify.MAP_ADDRESSES: 位字段,表示在采用选项掩码的方法中应匹配地图地址.