setText()和append()之间的区别

我很好奇setText()和append()创build的区别。 我正在用行号编写一个非常基本的编辑器。 我有一个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"); 

把最后一行改成这个,TextText中的每一行在EditText前面都有一个填充。

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

这不是世界末日。 但我很好奇是什么导致了这种行为。 由于我是新手,我唯一能想到的就是当append抛出Editable时,它会添加填充。 如果我能得到答案,我可以用更简单的附加语来replace所有这些讨厌的句子:

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

Solutions Collecting From Web of "setText()和append()之间的区别"

我认为通过append方法将BufferType更改为EDITABLE会导致意外的填充。 如果您想使用append方法而不是setText方法并删除该填充,

您可以尝试使用删除它

 textView.setincludeFontPadding(false) 

或者将这一行添加到你的XML文件中的textview

 android:includeFontPadding="false" 

希望这可以帮助。

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

//这里lineNumbers有它是testing

lineNumbers将有“这是testing” 。 之后,如果再次使用setText,则文本将完全更改

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

//在这里你会失去第一个文本和lineNumbers文本将是“这是第二次testing”

之后,如果你使用append,让我们看看会发生什么。

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

//这里你不会丢失 lineNumbers文本..就会这样“这是第二次testing,这是第三次testing”

setText():通过填充要设置的文本来销毁缓冲区内容。 append():将文本添加到缓冲区,然后打印结果。

例如: example.setText("Hello"); 会在输出屏幕上打印出你好。 如果你执行example.append("World"); 你会得到HelloWorld作为输出。

setText将用新的文本replace现有的文本。

从Android文档:
设置此TextView要显示的文本(请参阅setText(CharSequence)),并设置它是否存储在可修改的/可扩展的缓冲区中,以及是否可编辑。

追加将保留旧文本并添加新的更像连接。

从Android文档
便捷方法:将指定的文本附加到TextView的显示缓冲区,如果它尚不可编辑,则将其升级到BufferType.EDITABLE。