在TextView
中创建可点击链接的极其简单的方法。
在为 Twitter 创建 Talon 时,我遇到的最困难的事情之一就是根据特定文本创建这些可点击的链接。幸运的是,我让任何人都可以轻松地将这种类型的样式应用到他们的TextView
中。
与所有大玩家的做法类似(Google+、Twitter、咳爪咳),这个库允许您为TextView
中的任何String
组合创建可点击的链接。
TextView
中特定单词的长按和短按操作String
或使用正则表达式将可点击链接设置为符合该模式的任何文本与TextView
的自动链接功能相比,使用此库的主要优点是您可以链接任何内容,而不仅仅是网址、电子邮件和电话号码。它还提供颜色定制和触摸反馈。
有两种方法可以使用该库:
这是首选方式。只需添加:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
添加到您的项目依赖项并运行gradle build
或gradle assemble
。
下载源代码并将其作为库项目导入到 Eclipse 中。该项目位于文件夹库中。有关如何执行此操作的更多信息,请阅读此处。
功能可以在 Kotlin 示例的 MainActivity 中找到。对于 Java,请检查 JavaMainActivity。
有关我在 Talon 中使用的正则表达式列表,您可以访问此处
// Create the link rule to set what text should be linked.
// can use a specific string or a regex pattern
Link link = new Link ( "click here" )
. setTextColor ( Color . parseColor ( "#259B24" )) // optional, defaults to holo blue
. setTextColorOfHighlightedLink ( Color . parseColor ( "#0D3D0C" )) // optional, defaults to holo blue
. setHighlightAlpha ( .4f ) // optional, defaults to .15f
. setUnderlined ( false ) // optional, defaults to true
. setBold ( true ) // optional, defaults to false
. setOnLongClickListener ( new Link . OnLongClickListener () {
@ Override
public void onLongClick ( String clickedText ) {
// long clicked
}
})
. setOnClickListener ( new Link . OnClickListener () {
@ Override
public void onClick ( String clickedText ) {
// single clicked
}
});
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// create the link builder object add the link rule
LinkBuilder . on ( demoText )
. addLink ( link )
. build (); // create the clickable links
您还可以创建CharSequence
而不是直接创建链接并将其应用到TextView
。应用CharSequence
后,不要忘记在TextView
上设置移动方法,否则链接将无法单击。
// find the text view. Used to create the link builder
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// Add the links and make the links clickable
CharSequence sequence = LinkBuilder . from ( this , demoText . getText (). toString ())
. addLinks ( getExampleLinks ())
. build ();
demoText . setText ( sequence );
// if you forget to set the movement method, then your text will not be clickable!
demoText . setMovementMethod ( TouchableMovementMethod . getInstance ());
如果您想设置链接的默认文本颜色,而不需要在每个Link
对象上手动输入,则可以从活动主题中进行设置。
< style name = " LinkBuilderExampleTheme " parent = " android:Theme.Holo.Light " >
< item name = " linkBuilderStyle " >@style/LinkBuilder</ item >
</ style >
< style name = " LinkBuilder " >
< item name = " defaultLinkColor " >#222222</ item >
< item name = " defaultTextColorOfHighlightedLink " >#444444</ item >
</ style >
该库是基于 Kotlin 构建的,因此您可以使用一些扩展方法将链接应用到TextView
,而不是创建构建器。
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
默认情况下, LinkBuilder
将消耗TextView
上的所有触摸事件。这意味着如果您尝试实现ListView.OnItemClickListener
将永远不会被调用。解决此问题的方法是在布局中实现LinkConsumableTextView
而不是普通的 TextView。
如果您单击了TextView
中的链接,我的LinkConsumableTextView
将仅消耗触摸事件。否则,它将把触摸事件推迟到父级,这允许您使用ListView.OnItemClickListener
方法。
请分叉此存储库并使用拉取请求做出贡献。可以使用问题来请求功能。非常感谢所有代码、评论和批评。
可以在此处找到该库的完整变更日志。
Copyright 2015 Luke Klinker
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.