setText() 和 append() 的区别
Posted
技术标签:
【中文标题】setText() 和 append() 的区别【英文标题】:Difference between setText() and append() 【发布时间】:2013-10-21 15:36:07 【问题描述】:我很好奇 setText() 和 append() 正在创建的差异。我正在编写一个带有行号的非常基本的编辑器。我有一个 TextView 来保存左侧的行号,与右侧的 EditText 配对来保存数据。这是 XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:gravity="top">
<TextView
android:id="@+id/line_numbers"
android:layout_
android:layout_
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_
android:layout_
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");
【问题讨论】:
【参考方案1】:lineNumbers.setText("It is test,");
//这里lineNumbers有是测试
lineNumbers 将具有 "It is test,"。之后,如果再次使用 setText,文本会完全改变
lineNumbers.setText("It is second test,");
//这里你会丢失第一个文本和lineNumbers文本将是“这是 第二次测试,”
之后,如果你使用 append,让我们看看会发生什么..
lineNumbers.append("It is third test,");
// 这里你不会丢失 lineNumbers text.. 会是这样的 “第二次测试,第三次测试”
【讨论】:
【参考方案2】:setText():
通过填充要设置的文本来破坏缓冲区内容。
append():
将文本添加到缓冲区,然后打印结果。
示例:example.setText("Hello");
将在输出屏幕上打印 Hello。如果您随后执行example.append("World");
,您将得到 HelloWorld 作为输出。
【讨论】:
没有以任何方式解决问题的内容(可能是标题,但不是确切问题的描述)【参考方案3】:setText
将用新文本替换现有文本。
来自 Android 文档: 设置此 TextView 要显示的文本(请参阅 setText(CharSequence))并设置是否显示 存储在可样式/可跨缓冲区中,以及是否可编辑。
append 将保留旧文本并添加新文本,更像是连接。
来自 Android 文档 便捷方法:将指定文本追加到TextView的显示缓冲区,升级为 BufferType.EDITABLE 如果它还不是可编辑的。
【讨论】:
【参考方案4】:我认为通过 append 方法将 BufferType 更改为 EDITABLE 会导致意外填充。 如果您想使用 append 方法而不是 setText 方法并删除该填充,
您可以尝试使用删除它
textView.setincludeFontPadding(false)
或将此行添加到您的 xml 文件中的 textview 中
android:includeFontPadding="false"
希望这会有所帮助。
【讨论】:
【参考方案5】:基本区别在于setText()
替换现有文本中的所有文本,append()
将您的新值添加到现有文本中。希望我有所帮助。
【讨论】:
以上是关于setText() 和 append() 的区别的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中,“.append()”和“+= []”有啥区别?