J'ai essayé d'utiliser getString()
pour obtenir une chaîne de mon string.xml
Toutefois. Je viens de découvrir que la méthode getText()
peut récupérer les balises HTML depuis mes ressources!
Dire:
<string name="mySTring"><b><i>Hello Guys</i></b></string>
cela m'a surpris, car je devais utiliser Html.fromHtml()
pour récupérer les balises HTML - ce qui est obsolète.
Quelle est la différence entre les deux méthodes?
Y at-il un avantage ou un inconvénient?
De la doc,
Pour Resources.getString()
:
Renvoie la valeur de chaîne associée à un identifiant de ressource particulier. Il sera dépouillé de toute information textuelle stylée.
Pour Resources.getText()
:
Renvoie la valeur de chaîne associée à un identifiant de ressource particulier. Le l'objet retourné sera une chaîne s'il s'agit d'une chaîne simple; ce sera un autre type de CharSequence s'il est stylé.
(Notez que Context.getText()
et Context.getString()
appelle en interne les méthodes à partir de Resources
.]}
Le doc dit que getText()
conserve le style alors que getString()
ne le fait pas. Mais vous pouvez utiliser l'un ou l'autre pour obtenir la ressource chaîne avec les balises HTML à partir de strings.xml
, mais la manière est différente.
Utilisation de Resources.getText ():
strings.xml
:
<string name="styled_text">Hello, <b>World</b>!</string>
Vous pouvez simplement appeler getText()
(notez qu'il renvoie un CharSequence
et non un String
; il a donc les propriétés de style)} et définissez le texte sur TextView
. Pas besoin de Html.fromHtml()
.
mTextView.setText(getText(R.string.styled_text));
Mais le doc indique que seules les balises HTML limitées, telles que <b>, <i>, <u>
, sont prises en charge par cette méthode. Le code source semble suggérer qu'il supporte plus que cela: <b>, <i>, <u>, <big>, <small>, <sup>, <sub>, <strike>, <li>, <Marquee>, <a>, <font> and <annotation>
Utilisation de Resources.getString ():
strings.xml
:
<string name="styled_text"><![CDATA[Hello, <b>World</b>!]></string>
Vous devez entourer votre chaîne d'un bloc CDATA
et appeler getString
renverra la chaîne avec les balises HTML. Ici, vous devez utiliser Html.fromHtml()
.
mTextView.setText(Html.fromHtml( getString(R.string.styled_text)));
Html.fromHtml()
est déconseillé au profit d'une nouvelle méthode avec le paramètre flags
. Alors utilisez-le comme ça:
HtmlCompat.fromHtml(getString(R.string.styled_text))
Implémentation de la méthode util HtmlCompat.fromHtml
:
public class HtmlCompat {
public static CharSequence fromHtml(String source) {
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
//noinspection deprecation
return Html.fromHtml(source);
} else {
return Html.fromHtml(source, Html.FROM_HTML_MODE_COMPACT);
}
}
}
Selon la docs , il n’ya pratiquement aucune différence autre que
You can use either getString(int) or getText(int) to retrieve a string.
getText(int) will retain any rich text styling applied to the string.
Vous utiliseriez donc getText pour toutes les ressources localisées, par exemple pour traiter des conversions de langues différentes, mais si vous ne gérez que des chaînes, cela n'a pas d'importance.
La méthode getString () implémentée consiste à transformer les données en format de chaîne ex "100" qui prend 100 en tant que chaîne et non en entier. Pour getText, la méthode capturera toutes les données TextView ou les entrées d’EditText. Tout dépend de la façon dont vous voulez réaliser votre traitement d’entrée et de sortie de programme avec la bonne méthode.
Modifier*
Vous pouvez utiliser getString(int)
ou getText(int)
pour récupérer une chaîne. getText(int)
conserve le style de texte enrichi appliqué à la chaîne
Quelques différences ..... selon le doc
getString(int id, Object... formatArgs)
Renvoie la valeur de chaîne associée à un ID de ressource particulier, en substituant les arguments de format tels que définis dans Formatter et format (chaîne, objet ...). Il sera débarrassé de tout texte stylé information.
getString(int id)
Renvoie la valeur de chaîne associée à un identifiant de ressource particulier. Il sera dépouillé de toute information textuelle stylée.
getText(int id, CharSequence def)
Renvoie la valeur de chaîne associée à un identifiant de ressource particulier.
getText(int id)
Renvoie la valeur de chaîne associée à un ID de ressource particulier . L'objet retourné sera une chaîne s'il s'agit d'une chaîne simple; il sera un autre type de CharSequence si elle est stylée.