web-dev-qa-db-de.com

Unterschied zwischen setText () und append ()

Ich bin neugierig auf den Unterschied, den setText () und append () erzeugen. Ich schreibe einen sehr einfachen Editor mit Zeilennummern. Ich habe eine TextView, um Zeilennummern links zu speichern, rechts einen EditText, um die Daten zu speichern. Hier ist das 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>

Ich ignorierte einige der anderen Dinge, die ich tue. Das Seltsamste war, dass ich etwas mehr Abstand hatte, als ich append () verwendete (vorausgesetzt, die Dinge wurden initialisiert und all das).

In Kombination mit der XML-Datei wird unten ein leerer Rand zwischen TextView und EditText festgelegt.

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

Ändern Sie jedoch die letzte Zeile, und plötzlich hat jede Zeile in der TextView rechts vor dem EditText eine Auffüllung.

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

Es ist nicht das Ende der Welt. aber ich war neugierig, was dieses Verhalten verursacht hat. Da ich neu in der Sprache bin, konnte ich nur daran denken, dass beim Anhängen des Editable dort die Auffüllung hinzugefügt wird. Wenn ich eine Antwort erhalten kann, kann ich alle diese unangenehmen Zeilen durch einfachere Anhänge ersetzen:

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

Ich denke, das Ändern von BufferType in EDITABLE durch die Append-Methode verursachte die unerwartete Auffüllung. Wenn Sie die Anhänge-Methode anstelle der SetText-Methode verwenden und diese Auffüllung entfernen möchten,

sie können versuchen, es mit zu entfernen

textView.setincludeFontPadding(false)

oder fügen Sie diese Zeile zu Ihrer Textansicht in Ihrer XML-Datei hinzu

Android:includeFontPadding="false"

Hoffe das hilft.

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

// Hier haben lineNumbers Es ist test

zeilennummern haben "Es ist Test". Wenn Sie danach erneut setText verwenden, wird text vollständig geändert. 

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

// Hier verlieren Sie den ersten Text, und der Zeilennummerentext lautet "Es ist Zweiter Test".

Wenn Sie dann append verwenden, können Sie sehen, was passiert. 

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

// Hier werden Sie den lineNumbers-Text nicht verlieren. Es wird so sein "Es ist der zweite Test, es ist der dritte Test"

11
Emre Koç

setText(): Zerstört den Pufferinhalt, indem der zu setzende Text gefüllt wird .____append(): Fügt einem Puffer einen Text hinzu und druckt das Ergebnis.

Beispiel: example.setText("Hello"); würde Hallo auf dem Ausgabebildschirm drucken. Wenn Sie dann example.append("World"); ausführen, erhalten Sie HelloWorld als Ausgabe.

6
VikramV

setText ersetzt den vorhandenen Text durch neuen Text.

Aus dem Android-Dokument: 
Legt den Text fest, den dieses TextView anzeigen soll (siehe setText (CharSequence)) und legt außerdem fest, ob es .__ ist. wird in einem ansprechbaren/spannbaren Puffer gespeichert und kann bearbeitet werden.

append behält den alten Text und fügt den neuen Text eher wie verketten hinzu. 

Von Android Doc 
Convenience-Methode: Hängen Sie den angegebenen Text an den Anzeigepuffer des TextView an und aktualisieren Sie ihn auf BufferType.EDITABLE, falls es noch nicht bearbeitet werden konnte. 

3
minhaz

Der grundlegende Unterschied besteht darin, dass setText() den gesamten Text aus dem vorhandenen ersetzt und append() Ihren neuen Wert zu dem vorhandenen hinzufügt. Ich hoffe, ich habe geholfen.

0
Fokou Franklin