Diferencia entre setText () y append ()

Tengo curiosidad por la diferencia que setText () y append () están creando. Estoy escribiendo un editor muy básico con números de línea. Tengo un TextView para sostener los números de línea a la izquierda, emparejado con un EditText a la derecha para sostener los datos. Aquí está el 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> 

Ignorando algunas de las otras cosas que estoy haciendo, lo más curioso que encontré fue el espacio extra que apareció cuando usé append () (suponiendo que las cosas se han inicializado y todo eso).

Esto a continuación, en combinación con el XML, establece un borde de color entre TextView y EditText.

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

Cambiar la última línea a esto, sin embargo, y de repente cada línea en el TextView tiene relleno a la derecha antes de la EditText.

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

No es el fin del mundo. Pero estaba curioso de lo que estaba causando este comportamiento. Ya que soy nuevo en el lenguaje, lo único que podía pensar era quizás, cuando se agrega lanza el Editable allí, se agrega el relleno. Si puedo obtener una respuesta, puedo reemplazar todas estas líneas desagradables con anexos más simples:

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

Creo que cambiar BufferType a EDITABLE por append método causado el relleno inesperado. Si desea utilizar el método append en lugar del método setText y eliminar ese relleno,

Puede intentar eliminarlo utilizando

 textView.setincludeFontPadding(false) 

O añadir esta línea a su textview en su archivo xml

 android:includeFontPadding="false" 

Espero que esto ayude.

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

// Aquí lineNumbers tiene It is test

LineNumbers tendrá "Es prueba," . Después de eso, si usa setText de nuevo, el texto cambiará completamente

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

// Aquí perderás el primer texto y el texto de lineNumbers será "Es segunda prueba"

Después de eso, si usas append, vamos a ver qué pasará ..

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

// Aquí no perderás texto de lineNumbers .. Será como esto "Es segunda prueba, es tercera prueba"

setText(): Destruye el contenido de la memoria intermedia rellenando el texto que se va a configurar. append(): Agrega un texto a un búfer y luego imprime el resultado.

Ejemplo: example.setText("Hello"); Imprimiría Hello en la pantalla de salida. Si luego ejecuta example.append("World"); Obtendría HelloWorld como la salida.

setText reemplazará el texto existente por el texto nuevo.

Desde el documento de Android:
Establece el texto que debe mostrar este TextView (vea setText (CharSequence)) y también establece si se almacena en un búfer de estilo / spannable y si es editable.

Append mantendrá el texto antiguo y agregará el nuevo más como concatenación.

Desde Android Doc
Método de conveniencia: Añade el texto especificado al búfer de visualización de TextView, actualizándolo a BufferType.EDITABLE si no era ya editable.

  • Referencia cadena de recursos de código
  • Cambiar texto de otra actividad
  • SetText no establece texto en EditText
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.