Un moyen incroyablement simple de créer des liens cliquables dans un TextView
.
Lors de la création de Talon pour Twitter, l'une des choses les plus difficiles que j'ai rencontrées a été de créer ces liens cliquables basés sur un texte spécifique. Heureusement, j'ai permis à quiconque d'appliquer facilement ce type de style à ses TextView
.
Semblable à la façon dont tous les grands acteurs le font (Google+, Twitter, toux Talon toux ), cette bibliothèque vous permet de créer des liens cliquables pour n'importe quelle combinaison de String
dans un TextView
.
TextView
String
uniques ou utilisez une expression régulière pour définir des liens cliquables vers n'importe quel texte conforme à ce modèle Le principal avantage de l'utilisation de cette bibliothèque par rapport à la fonctionnalité de liaison automatique de TextView
est que vous pouvez lier n'importe quoi, pas seulement une adresse Web, des e-mails et des numéros de téléphone. Il permet également une personnalisation des couleurs et un retour tactile.
Il existe deux manières d'utiliser cette bibliothèque :
C'est la méthode préférée. Ajoutez simplement :
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
aux dépendances de votre projet et exécutez gradle build
ou gradle assemble
.
Téléchargez le code source et importez-le en tant que projet de bibliothèque dans Eclipse. Le projet est disponible dans la bibliothèque de dossiers . Pour plus d’informations sur la façon de procéder, lisez ici.
La fonctionnalité peut être trouvée dans MainActivity de l’exemple Kotlin. Pour Java, vérifiez JavaMainActivity.
Pour une liste des expressions régulières que j'utilise dans Talon, vous pouvez aller ici
// 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
Vous pouvez également créer un CharSequence
au lieu de créer et d'appliquer les liens directement au TextView
. N'oubliez pas de définir la méthode de mouvement sur votre TextView
après avoir appliqué le CharSequence
, sinon les liens ne seront pas cliquables.
// 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 vous souhaitez définir la couleur du texte par défaut pour les liens sans la saisir manuellement sur chaque objet Link
, elle peut être définie à partir du thème de l'activité.
< 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 bibliothèque est construite sur Kotlin, vous obtenez donc des méthodes d'extension que vous pouvez utiliser pour appliquer les liens au TextView
, au lieu de créer le générateur.
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
Par défaut, LinkBuilder
consommera tous les événements tactiles sur votre TextView
. Cela signifie que ListView.OnItemClickListener
ne sera jamais appelé si vous essayez de l'implémenter. La solution à ce problème consiste à implémenter LinkConsumableTextView
plutôt que TextView normal dans vos mises en page.
Mon LinkConsumableTextView
ne consommera des événements tactiles que si vous avez cliqué sur le lien dans TextView
. Sinon, il reportera l'événement tactile au parent, ce qui vous permettra d'utiliser la méthode ListView.OnItemClickListener
.
Veuillez créer ce référentiel et contribuer en utilisant des demandes d'extraction. Les fonctionnalités peuvent être demandées à l’aide de problèmes. Tous les codes, commentaires et critiques sont grandement appréciés.
Le journal des modifications complet de la bibliothèque peut être trouvé ici.
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.