Je mets du texte en utilisant setText () de la manière suivante.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
Dans ce premier est une utilisation simple et le deuxième est la mise en forme du texte avec le texte de mise en forme.
Android Studio est tellement intéressant, j'ai utilisé Menu Analyze -> Code Cleanup
et j'ai reçu des suggestions sur deux lignes comme.
Ne concaténez pas le texte affiché avec setText. Utilisez une chaîne de ressource avec des espaces réservés. moins ... (Ctrl + F1)
Lors de l'appel de TextView # setText:
- N'appelez jamais Number # toString () pour formater les nombres; il ne gérera pas correctement les séparateurs de fractions et les chiffres spécifiques aux paramètres régionaux. Pensez à utiliser le format String # avec des spécifications de format appropriées (% d ou% f) à la place.
- Ne transmettez pas de chaîne littérale (par exemple "Hello") pour afficher le texte. Le texte codé en dur ne peut pas être correctement traduit dans d'autres langues. Envisagez plutôt d'utiliser des chaînes de ressources Android.
- Ne créez pas de messages en concaténant des blocs de texte. Ces messages ne peuvent pas être correctement traduits.
Que puis-je faire pour cela? N'importe qui peut aider à expliquer ce qu'est la chose et que dois-je faire?
android
concatenation
textview
string-concatenation
Pratik Butani
la source
la source
String
danssetText()
. Ex:setText(name)
au lieu desetText("" + name)
. Parce que si vous concaténez du texte, il ne sera pas traduit comme vous utilisez le texte codé en dur comme notification de messageNPE
siname
c'estNULL
name
n'est pasNULL
avant d'utiliser lasetText()
fonction.<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
Et dans votre code java, vous faites quelque chose comme ceci:prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(vous pouvez faire le formatage dans le fichier xml: [ developer.android.com/guide/topics/resources/…Réponses:
La ressource a la version surchargée de getString qui prend un
varargs
de typeObject
: getString (int, java.lang.Object ...) . Si vous configurez correctement votre chaîne dans strings.xml, avec les espaces réservés appropriés, vous pouvez utiliser cette version pour récupérer la version formatée de votre chaîne finale. Par exempleen utilisant
getString(R.string.welcome_message, "Test", 0);
android renverra une chaîne avec
À propos
setText("" + name);
Votre premier exemple
prodNameView.setText("" + name);
n'a aucun sens pour moi. Le TextView est capable de gérer des valeurs nulles. Si le nom est nul, aucun texte ne sera dessiné.la source
%1$f
à votre chaîne, dans strings.xml, puis appelezsetText(getString(R.string.string_product_rate_with_ruppe_sign, new BigDecimal(price).setScale(2, RoundingMode.UP).floatValue() ));
%1$d
. @ reegan29Ne vous méprenez pas avec % 1 $ s et % 2 $ d dans la réponse acceptée, voici quelques informations supplémentaires.
Exemple
Nous allons créer la chaîne formatée suivante où les parties grises sont insérées par programme.
Votre
string resource
:Procédez
string substitution
comme indiqué ci-dessous:Remarque:
la source
J'ai rencontré le même message d'erreur de peluches et je l'ai résolu de cette façon.
Au départ, mon code était:
J'ai eu l'erreur suivante
Alors, j'ai ajouté ceci à
strings.xml
Quel est mon "" initial + un espace réservé pour mon numéro (quantité).
Remarque : Ma
quantity
variable a été précédemment définie et c'est ce que je voulais ajouter à la chaîne. Mon code en conséquence étaitAprès cela, mon erreur a disparu. Le comportement de l'application n'a pas changé et ma quantité a continué à s'afficher comme je le voulais maintenant sans erreur de peluche.
la source
Vous devriez vérifier ce fil et utiliser un espace réservé comme le sien (non testé)
la source
Ne concaténez pas de texte dans votre méthode setText () , concaténez ce que vous voulez dans un String et mettez cette valeur String dans votre méthode setText () .
ex: manière correcte
Ne pas concaténer à l'intérieur de setText () comme
la source
le problème est que vous ajoutez
""
au début de chaque chaîne.lint analysera les arguments passés à
setText
et générera des avertissements, dans votre cas, l'avertissement suivant est pertinent:comme vous concaténez chaque chaîne avec
""
.supprimez cette concaténation car les arguments que vous passez sont déjà du texte. En outre, vous pouvez utiliser
.toString()
si nécessaire n'importe où ailleurs au lieu de concaténer votre chaîne avec""
la source
Si vous n'avez pas besoin de prendre en charge i18n, vous pouvez désactiver cette vérification des peluches dans Android Studio
Fichier -> Paramètres -> Editeur -> Inspections -> Android -> Lint -> TextView Internationalization (décochez ceci)
la source
Tu peux utiliser ça, ça marche pour moi
la source
la source
Ne soyez pas fou, c'est trop simple.
la source