web-dev-qa-db-fra.com

Quelle est la différence entre getString () et getText ()?

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?

15
Shahin Soft

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);
        }
    }

}
17
Bob

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. 

1
user685590

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.

0
Gooner

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.

0
Omar Dhanish