Je ne sais pas comment rendre un texte spécifique sur TextView en gras.
C'est comme ça
txtResult.setText(id+" "+name);
Je veux que la sortie soit comme ceci:
1111 neil
id
et name
sont des variables dont j'ai récupéré la valeur de la base de données, et je veux mettre le id
en gras, mais seulement le id
afin que le name
ne soit pas affecté, je ne sais pas comment faire.
android
textview
android-textattributes
Budi Darmawan
la source
la source
Réponses:
Construisez simplement votre chaîne en HTML et définissez-la:
la source
Html.fromHtml()
est désormais obsolèteBien que vous puissiez utiliser Html.fromHtml (), vous pouvez utiliser une approche plus native qui est SpannableStringBuilder , ce message peut être utile.
la source
Premièrement: vous n'avez pas à vous soucier de l'utilisation du code de performances lentes de la réponse de Raghav Sood .
Deuxièmement: vous n'avez pas besoin d'écrire une fonction d'extension fournie par la réponse de w3bshark lorsque vous utilisez Kotlin.
Finnaly: Tout ce que vous devez faire est d'utiliser la bibliothèque Kotlin android-ktx de Google (référez-vous ici pour trouver plus d'informations et comment l'inclure dans votre projet):
METTRE À JOUR:
Parce que je pense que cela peut aider quelqu'un d'autre et montrer jusqu'où vous pouvez aller ici sont plus de cas d'utilisation.
Lorsque vous devez afficher un texte avec certaines parties en bleu et en italique:
Lorsque vous devez afficher un texte en gras et en italique:
Bref,
bold
,append
,color
etitalic
sont des fonctions d'extension àSpannableStringBuilder
. Vous pouvez voir une autre fonction d'extension dans la documentation officielle , d'où vous pouvez penser à d'autres possibilités.la source
J'ai pensé que la réponse choisie n'avait pas donné de résultat satisfaisant. J'ai écrit ma propre fonction qui prend 2 chaînes; Le texte intégral et la partie du texte que vous souhaitez mettre en gras.
Il renvoie un SpannableStringBuilder avec le 'textToBold' de 'text' en gras.
Je trouve la possibilité de rendre une sous-chaîne en gras sans l'envelopper dans des balises utiles.
la source
Comme l'a dit wtsang02, l'utilisation de HTML est une surcharge coûteuse. Utilisez simplement la solution native. Si vous n'avez pas à modifier la chaîne, utilisez simplement SpannableString, pas SpannableStringBuilder.
la source
Si vous souhaitez utiliser la chaîne de XML, vous pouvez faire quelque chose comme ceci:
strings.xml (la partie "CDATA" est importante, sinon cela ne fonctionnera pas)
fichier de mise en page
code
la source
<string name="test"><b>text bold</b> other text</string>
. Ne fonctionne pas si j'écris<![CDATA[
Il suffit de fermer le texte spécifié comme celui-ci par exemple
<b>"your text here:"</b>
résultat: Siège: Mooresville, Caroline du Nord, États-Unis
la source
Si vous utilisez Kotlin, cela devient encore plus facile à faire en utilisant
core-ktx
, car il fournit un langage spécifique au domaine (DSL) pour ce faire:Plus d'options fournies par lui sont:
Enfin, vous pouvez simplement:
la source
Voici une meilleure solution si vous souhaitez mettre plusieurs textes en gras. J'ai amélioré le code d'Eitan. merci Eitan.
la source
Sur la base de la réponse de @ mladj0ni, j'ai obtenu le code ci-dessous pour fonctionner. Le problème était que si vous utilisez String.format , il supprime le balisage html, vous devez donc échapper les symboles de crochet dans strings.xml:
strings.xml:
<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>
code.java:
C'est plus simple que SpannableStringBuilder. En ce qui concerne les performances, si vous affichez une seule chaîne, l'utilisateur ne remarquera pas la milliseconde supplémentaire pour l'analyser.
Voir la documentation ici .
la source
Vous pouvez utiliser ce code pour mettre une partie de votre texte en gras. Pour tout ce qui se trouve entre les balises html en gras, cela le rendra en gras.
la source
Essaye ça. Cela peut certainement aider
la source
Rendre le premier caractère de la chaîne extensible lors de la recherche du caractère dans la liste / recycleur comme
mettant en évidence précédemment comme ça, mais je voulais être comme ci-dessous
pour cela j'ai cherché la longueur du mot si elle est égale à 1, j'ai séparé la chaîne principale en mots et calculé la position de départ du mot puis j'ai cherché le mot commençant par char.
la source
Je suis venu ici pour fournir une solution plus à jour, car je n'étais pas satisfait des réponses existantes. J'avais besoin de quelque chose qui fonctionnerait pour les textes traduits et qui n'aurait pas la performance de l'utilisation
Html.fromHtml()
. Si vous utilisez Kotlin, voici une fonction d'extension qui mettra facilement plusieurs parties de votre texte en gras . Cela fonctionne exactement comme Markdown et pourrait être étendu pour prendre en charge d'autres balises Markdown, si besoin est.la source
wtsang02 réponse est la meilleure façon de procéder, car Html.fromHtml ("") est désormais obsolète. Ici, je vais juste l'améliorer un peu pour quiconque a du mal à rendre dynamiquement le premier mot en gras, quelle que soit la taille de la phrase.
Commençons par créer une méthode pour obtenir le premier mot:
Supposons maintenant que vous ayez une longue chaîne comme celle-ci:
Et vous voulez que votre phrase soit comme [email protected] veut être votre ami! Tout ce que vous avez à faire est d'obtenir le premier mot et d'obtenir sa longueur pour rendre le premier mot en gras, quelque chose comme ceci:
Maintenant, suivez simplement les étapes de wtsang02 , comme ceci:
Et c'est tout! Vous devriez maintenant être en mesure de mettre en gras un mot de n'importe quelle taille dans une phrase longue / courte. J'espère que cela aidera quelqu'un, codage heureux :)
la source
Ceci est la fonction d'extension Kotlin que j'utilise pour cela
Usage:
.
la source
Vous pouvez ajouter les deux chaînes séparément dans le générateur, l'une d'entre elles est spannedString, l'autre est une chaîne régulière. De cette façon, vous n'avez pas à calculer les index.
la source
si la position du texte en gras est fixe (ex: si se trouve au début de textView), alors utilisez deux textView différents avec le même arrière-plan. Ensuite, vous pouvez mettre en gras le textStyle de l'autre textView.
Cela nécessitera deux fois la mémoire par rapport à une seule TextView mais la vitesse augmentera.
la source
Un autre code plus personnalisé
la source
Dans le cas où quelqu'un utilise la liaison de données. Nous pouvons définir un adaptateur de liaison comme celui-ci
Ensuite, nous pouvons l'utiliser sur un TextView
où bold_text est
la source
Trouvé un moyen au cas où vous voudriez gérer la localisation dans plusieurs langues, c'est ennuyeux à faire mais ça marche, supposons que nous voulons ceci:
En anglais:
En espagnol:
Vous devez créer 3 chaînes
Anglais:
Espagnol:
Vous pouvez maintenant le faire:
la source
Votre ressource String
votre classe java
la source
Voici ma solution complète pour les valeurs de chaîne dynamiques avec vérification de la casse.
Par exemple. completeString = "Je suis BOLD"
CAS I si
*targetStringToFormat* = "bold"
et*matchCase* = true
CAS II si
*targetStringToFormat* = "bold"
et*matchCase* = false
Postuler:
J'espère que cela pourra aider!
la source