Una manera increíblemente fácil de crear enlaces en los que se puede hacer clic dentro de un TextView
.
Al crear Talon para Twitter, una de las cosas más difíciles que encontré fue crear estos enlaces en los que se puede hacer clic basados en un texto específico. Afortunadamente, he facilitado que cualquiera pueda aplicar este tipo de estilo a sus TextView
.
De manera similar a cómo lo hacen todos los grandes jugadores (Google+, Twitter, tos Talon tos ), esta biblioteca le permite crear enlaces en los que se puede hacer clic para cualquier combinación de String
dentro de un TextView
.
TextView
String
únicas o use una expresión regular para establecer enlaces en los que se pueda hacer clic a cualquier texto que se ajuste a ese patrón. La principal ventaja de utilizar esta biblioteca sobre la funcionalidad de enlace automático de TextView
es que puede vincular cualquier cosa, no solo direcciones web, correos electrónicos y números de teléfono. También proporciona personalización del color y retroalimentación táctil.
Hay dos formas de utilizar esta biblioteca:
Ésta es la forma preferida. Simplemente agregue:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
a las dependencias de su proyecto y ejecute gradle build
o gradle assemble
.
Descargue el código fuente e impórtelo como un proyecto de biblioteca en Eclipse. El proyecto está disponible en la biblioteca de carpetas. Para obtener más información sobre cómo hacer esto, lea aquí.
La funcionalidad se puede encontrar en MainActivity del ejemplo de Kotlin. Para Java, consulte JavaMainActivity.
Para obtener una lista de expresiones regulares que uso en Talon, puedes ir aquí
// 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
También puede crear una CharSequence
en lugar de crear y aplicar los enlaces directamente a TextView
. No olvide configurar el método de movimiento en su TextView
después de haber aplicado CharSequence
, de lo contrario no se podrá hacer clic en los enlaces.
// 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 ());
Si desea configurar el color de texto predeterminado para los enlaces sin ingresarlo manualmente en cada objeto Link
, puede configurarlo desde el tema de actividad.
< 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 >
La biblioteca está construida en Kotlin, por lo que obtienes algunos métodos de extensión que puedes usar para aplicar los enlaces a TextView
, en lugar de crear el constructor.
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
De forma predeterminada, LinkBuilder
consumirá todos los eventos táctiles en su TextView
. Esto significa que nunca se llamará ListView.OnItemClickListener
si intenta implementarlo. La solución para esto es implementar LinkConsumableTextView
en lugar del TextView normal en sus diseños.
My LinkConsumableTextView
solo consumirá eventos táctiles si ha hecho clic en el enlace dentro de TextView
. De lo contrario, diferirá el evento táctil al padre, lo que le permitirá utilizar el método ListView.OnItemClickListener
.
Bifurque este repositorio y contribuya mediante solicitudes de extracción. Las funciones se pueden solicitar mediante problemas. Todo el código, comentarios y críticas son muy apreciados.
El registro de cambios completo de la biblioteca se puede encontrar aquí.
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.