Разница между setText () и append ()

Мне интересно, как создаются различия setText () и append (). Я пишу очень простой редактор с номерами строк. У меня есть TextView для хранения номеров строк слева, в паре с EditText справа для хранения данных. Вот 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> 

Игнорируя некоторые из других вещей, которые я делаю, наиболее любопытная вещь, с которой я столкнулся, – это дополнительный интервал, который появился, когда я использовал append () (при условии, что все было инициализировано, и все такое).

Это ниже, в сочетании с XML, устанавливает границу смыва между TextView и EditText.

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

Однако измените последнюю строку на эту, и вдруг каждая строка в TextView имеет дополнение справа от EditText.

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

Это не конец света. Но мне было любопытно, что вызывает такое поведение. Поскольку я новичок в языке, единственное, о чем я мог подумать, может быть, когда append выбрасывает Editable там, он добавляет дополнение. Если я смогу получить ответ, я смогу заменить все эти неприятные строки более простыми добавлениями:

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

Solutions Collecting From Web of "Разница между setText () и append ()"

Я думаю, что изменение BufferType в EDITABLE методом append вызвало неожиданное заполнение. Если вы хотите использовать метод append вместо метода setText и удалить это дополнение,

Вы можете попытаться удалить его, используя

 textView.setincludeFontPadding(false) 

Или добавление этой строки в текст в вашем XML-файле

 android:includeFontPadding="false" 

Надеюсь это поможет.

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

// Здесь lineNumbers есть это тест

LineNumbers будет иметь «Это тест» . После этого, если вы снова используете setText, текст полностью изменится

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

// Здесь вы потеряете первый текст и текст lineNumbers будет «Это второй тест»,

После этого, если вы используете append, давайте посмотрим, что произойдет.

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

// Здесь вы не потеряете текст lineNumbers. Это будет так: «Это второй тест, это третий тест»,

setText(): Уничтожает содержимое буфера, заполняя текст, который нужно установить. append(): добавляет текст в буфер и затем выводит результат.

Пример: example.setText("Hello"); Будет печатать Hello на экране вывода. Если вы затем выполните example.append("World"); Вы получите HelloWorld в качестве вывода.

setText заменит существующий текст новым текстом.

От Android doc:
Устанавливает текст, отображаемый этим TextView (см. SetText (CharSequence)), а также устанавливает, хранится ли он в буфере с возможностью стирания / спаннинга и доступен ли его редактируемый.

Append сохранит старый текст и добавит новый, похожий на конкатенацию.

От Android Doc
Метод удобства: добавьте указанный текст в буфер отображения TextView, обновив его до BufferType.EDITABLE, если он еще не редактировался.