web-dev-qa-db-fra.com

Différence entre setText () et append ()

Je suis curieux de voir la différence que créent setText () et append (). J'écris un éditeur très basique avec des numéros de ligne. J'ai un TextView pour contenir les numéros de ligne sur la gauche, couplé avec un EditText sur la droite pour contenir les données. Voici le XML:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" 
    Android:gravity="top">
    <TextView
        Android:id="@+id/line_numbers"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginRight="0dip"
        Android:gravity="top"
        Android:textSize="14sp"
        Android:textColor="#000000"
        Android:typeface="monospace"
        Android:paddingLeft="0dp"/>
    <EditText
        Android:id="@+id/editor"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        Android:inputType="text|textMultiLine|textNoSuggestions"
        Android:imeOptions="actionNone"
        Android:gravity="top"
        Android:textSize="14sp"
        Android:textColor="#000000"
        Android:typeface="monospace"/>
</LinearLayout>

En ignorant certaines des choses que je fais, la chose la plus curieuse que j'ai trouvée est l'espacement supplémentaire qui est apparu lorsque j'ai utilisé append () (en supposant que les choses ont été initialisées et tout le reste).

Ce qui suit, en combinaison avec XML, définit une bordure affleurante entre TextView et EditText.

theEditor = (EditText) findViewById(R.id.editor);
lineNumbers = (TextView) findViewById(R.id.line_numbers);
theLineCount = theEditor.getLineCount();
lineNumbers.setText(String.valueOf(theLineCount)+"\n");

Modifiez cependant la dernière ligne et soudainement, chaque ligne de TextView est complétée à droite avant EditText.

lineNumbers.append(String.valueOf(theLineCount)+"\n");

Ce n'est pas la fin du monde. mais j'étais curieux de savoir ce qui causait ce comportement. Étant donné que je suis nouveau dans la langue, la seule chose à laquelle je pouvais penser était peut-être que, quand append jette Editable dessus, cela ajoute le remplissage. Si je peux obtenir une réponse, je peux remplacer toutes ces mauvaises lignes par des annexes plus simples:

lineNumbers.setText(lineNumbers.getText().toString()+String.valueOf(newLineCount)+"\n");
10
CJ Harries

Je pense que le remplacement de BufferType par EDITABLE par la méthode append a provoqué le remplissage inattendu . Si vous souhaitez utiliser la méthode append au lieu de la méthode setText et supprimer ce remplissage

vous pouvez essayer de l'enlever en utilisant

textView.setincludeFontPadding(false)

ou en ajoutant cette ligne à votre textview dans votre fichier xml

Android:includeFontPadding="false"

J'espère que cela t'aides.

2
SLee
lineNumbers.setText("It is test,");

// Ici lineNumbers ont C'est test

lineNumbers aura "C'est test", . Après cela, si vous utilisez setText à nouveau, le texte changera complètement  

lineNumbers.setText("It is second test,");

// Ici vous perdrez le premier texte et le texte lineNumbers sera "C'est Second test,"

Après cela, si vous utilisez append, voyons ce qui va se passer .. 

lineNumbers.append("It is third test,");

// Ici vous ne perdrez pas lineNumbers text .. Ce sera comme ceci "C'est un deuxième test, c'est un troisième test"

11
Emre Koç

setText(): Détruit le contenu du tampon en remplissant le texte à définir .append(): Ajoute un texte à un tampon, puis imprime le résultat.

Exemple: example.setText("Hello"); afficherait Hello sur l’écran de sortie. Si vous exécutez ensuite example.append("World");, vous obtiendrez HelloWorld en sortie.

6
VikramV

setText remplacera le texte existant par un nouveau texte.

De doc Android: 
Définit le texte que cette TextView doit afficher (voir setText (CharSequence)) et définit également si est stocké dans un tampon styleable/spannable et si celui-ci est éditable.

append conservera l'ancien texte et ajoutera le nouveau comme une concaténation. 

À partir d'Android Doc 
Méthode pratique: ajoute le texte spécifié à la mémoire tampon de TextView, en le mettant à niveau vers BufferType.EDITABLE s'il n'était pas déjà éditable. 

3
minhaz

La différence fondamentale est que setText() remplace tout le texte du texte existant et append() ajoute votre nouvelle valeur à celle existante. J'espère que j'ai aidé.

0
Fokou Franklin