Безумно простой способ создания кликабельных ссылок внутри TextView
.
При создании Talon для Twitter одной из самых сложных вещей, с которыми я столкнулся, было создание кликабельных ссылок на основе определенного текста. К счастью, я позволил каждому легко применить этот тип стиля к своим TextView
.
Подобно тому, как это делают все крупные игроки (Google+, Twitter, кашель Talon кашель ), эта библиотека позволяет создавать кликабельные ссылки для любой комбинации String
в TextView
.
TextView
String
или используйте регулярное выражение, чтобы установить интерактивные ссылки на любой текст, соответствующий этому шаблону. Основное преимущество использования этой библиотеки перед функцией автоматической ссылки TextView
заключается в том, что вы можете связать что угодно, а не только веб-адрес, электронную почту и номера телефонов. Он также обеспечивает настройку цвета и сенсорную обратную связь.
Есть два способа использования этой библиотеки:
Это предпочтительный способ. Просто добавьте:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
к зависимостям вашего проекта и запустите gradle build
или gradle assemble
.
Загрузите исходный код и импортируйте его как проект библиотеки в Eclipse. Проект доступен в папке библиотеки . Подробнее о том, как это сделать, читайте здесь.
Функциональность можно найти в MainActivity примера Kotlin. Для 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
. Не забудьте установить метод перемещения для вашего TextView
после применения CharSequence
, иначе ссылки не будут доступны для кликов.
// 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 в ваших макетах.
Мой LinkConsumableTextView
будет использовать события касания только в том случае, если вы щелкнули ссылку внутри TextView
. В противном случае событие касания будет передано родительскому элементу, что позволит вам использовать метод 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.