Comment puis-je faire une partie d'une Case de texte cliquable?
Je suis en train de créer un lien dans ma zone de texte de texte adjacente. Ce lien n'est cependant pas une URL, mais devrait agir comme un bouton afin que je puisse effectuer quelques tâches dans le onItemClick événement. Je suis fondamentalement de connexion à une vue qui montre notre Contrat de Licence Utilisateur Final (codé en dur).
Comment puis-je accomplir?
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Il existe une solution élégante, à l'aide de
CheckBox
et uniqueTextView
. Avec une combinaison deTextView.setClickable()
, Filtre d'Intention, etTextView.setMovementMethod()
.Vous avez vue principale (ici, je l'ai appelé ClickableTextViewExample):
main.xml
TCActivity.java
tc.xml
et la dernière pièce de codes qui colle le tout, le AndroidManifest.xml:
Voici les explications:
Après cela, vous avez besoin de prendre l'URL. Je l'ai fait à l'aide de
intent-filter
dans AndroidManifest.xmlVoici le paquet pour vous de l'essayer et voici le dépôt github. Espérons que cela a aidé
android:gravity="fill"
. Pensez également à ajouterstyle="?android:checkboxStyle"
.://Kode
?Scheme matching is case sensitive and should only use lower-case characters
lorsque vous passer de majuscules dans<data>
. Vous pouvez utiliserid.web.freelancer.example.termsactivity
et passe même à même à<a href=''>
Le code suivant a fonctionné pour moi sur KitKat. Je suis encore à l'essai sur ci-dessous les versions d'Android.
Vous souhaitez peut-être seulement une partie du texte d'un lien cliquable, tandis que le reste de la case à cocher se comporte comme d'habitude, c'est à dire que vous pouvez cliquer sur le texte pour changer l'état.
Vous pouvez configurer votre case comme ceci:
J'ai eu le même problème et je voulais avoir plus d'un des liens cliquables dans le texte de la case à cocher sans perdre la possibilité de cliquer n'importe où dans le texte (où il n'y a pas d'URL) pour sélectionner/désélectionner la case à cocher.
La différence par rapport aux autres réponses à cette question, c'est qu'avec cette solution, vous pouvez avoir plusieurs liens cliquables dans la case de texte et ces liens n'ont pas à être à la fin du texte.
La mise en page ressemble à celle de ariefbayu's réponse:
Je vais maintenant définir le texte par programmation. Le texte que je veux afficher est:
Car il contient du HTML, j'ai d'abord le convertir en Fractionné. Pour rendre les liens cliquables, j'en outre définir la méthode de mouvement de la TextView pour LinkMovementMethod:
Et c'est là le plus délicat. Jusqu'à présent, la Case à cocher ne pas être sélectionné lorsque vous appuyez sur le TextView. Pour arriver à cela, j'ai ajouté une touche de gestionnaire pour le TextView:
Enfin, comme vous l'avez probablement remarqué, il n'y a pas de méthode
getOffsetForPosition(...)
encore. Si vous ciblez des API de niveau 14+, vous pouvez simplement utilisergetOffsetForPosition()
, comme l'a souligné Dheeraj V. S.. Comme je cible API de niveau 8+, j'ai utilisé une application que j'ai trouvée ici: Déterminer le mot qui est cliqué dans un textview android.Créer un
CheckBox
sans texte et ajouter deuxTextView
s à côté d'elle. Le premier est un non cliquable vue avec le texte comme "j'ai lu et j'accepte les ". Le second est un cliquable vue avec le texte comme les "TERMES ET CONDITIONS". Placez leTextView
s côte à côte, sans aucune marge. Avis de l'espace supplémentaire à la fin de la première vue naturel, l'alignement du texte. De cette façon, vous pourriez le style de ces deux textes que vous le souhaitez.Exemple de code xml:
Puis ajouter un
onClick()
gestionnaire dans le code. Voilá.TextView
s side by side: non clicable "j'ai lu et j'accepte les" et juste à côté, un clicakble "TERMES ET CONDITIONS". Avis de l'espace supplémentaire à la fin de la première vue naturel, l'alignement du texte. De cette façon, vous pourriez le style de ces deux textes que vous le souhaitez.Je n'aimais pas la solution avec la case à cocher + textView que votre vue personnalisée permettra de prolonger la ViewGroup et pas de Case à cocher ainsi, vous forçant à envelopper Case comportement.
Il était important pour moi que la coutume Case à cocher peut être utilisée en xml exactement comme ordinaire.
Le comportement acceptable pour moi, c'était que cette Case ne soit activé lorsque vous appuyez sur la boîte et non pas sur le texte.
J'ai donc étendu Case, et pour obtenir ce comportement, j'ai joué avec l'ensemble de la touche mécanisme, le code complet est ci-dessous, et une explication juste après pour ceux qui aiment savoir comment elle fonctionne.
il s'appuie sur le fait que performClick méthode est de les appeler en interne par le TextView mécanisme que la Case à cocher s'étend, la ClickableSpan est aussi appelé par le TextView Mécanisme.
donc ce qui se passe est que lorsque vous touchez votre Case de texte, il fera appel à la fois.
Donc Ce que j'ai fait est de détecter si le clic a été dans la zone de texte, si nous allons donc désactiver le perfomClick ainsi, la désactivation de la touche à bascule. mais le cliquables durée sera toujours appelé.
Utilisation:
Il faut encore ajouter un lien span et setMovementMethod comme avant, comme un TextView.
Kotlin version (par le biais d'un extension) de Daniel Schuler la réponse de :
Utilisation :
Si vous recherchez une solution avec l'URL, je vous suggère d'utiliser, suivez la solution. Avec
CheckBox
etTextView
.où
URL_TERMS_AND_CONDS = "yourUrl.com";
etR.string.terms_and_conds
= id de la ressource avec la cliquables chaîne.