CJ *_*ies 10 android append textview settext
我很好奇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>
Run Code Online (Sandbox Code Playgroud)
忽略我正在做的其他一些事情,我遇到的最奇怪的事情是当我使用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");
Run Code Online (Sandbox Code Playgroud)
但是,最后一行更改为此,并且突然显示TextView中的每一行在EditText之前的右侧都有填充.
lineNumbers.append(String.valueOf(theLineCount)+"\n");
Run Code Online (Sandbox Code Playgroud)
这不是世界末日.但我很好奇是什么导致了这种行为.由于我是这门语言的新手,我唯一能想到的可能就是,当追加将可编辑放在那里时,它会添加填充.如果我能得到答案,我可以用更简单的附加替换所有这些讨厌的行:
lineNumbers.setText(lineNumbers.getText().toString()+String.valueOf(newLineCount)+"\n");
Run Code Online (Sandbox Code Playgroud)
Emr*_*Koç 12
lineNumbers.setText("It is test,");
Run Code Online (Sandbox Code Playgroud)
//这里lineNumbers有它是测试
lineNumbers将有"它是测试".之后,如果再次使用setText,文本将完全更改
lineNumbers.setText("It is second test,");
Run Code Online (Sandbox Code Playgroud)
//这里你将失去第一个文本和lineNumbers文本将是"它是第二次测试"
在那之后,如果你使用追加,让我们看看会发生什么.
lineNumbers.append("It is third test,");
Run Code Online (Sandbox Code Playgroud)
//这里你不会丢失 lineNumbers文本..它会是这样的 "这是第二次测试,它是第三次测试"
setText():通过填充要设置的文本来销毁缓冲区内容.
append():将文本添加到缓冲区,然后打印结果.
示例:example.setText("Hello");将在输出屏幕上打印Hello.如果你然后执行,example.append("World");你将获得HelloWorld作为输出.
我认为通过追加方法将 BufferType 更改为 EDITABLE 会导致意外的填充。如果您想使用追加方法而不是 setText 方法并删除该填充,
你可以尝试使用删除它
textView.setincludeFontPadding(false)
Run Code Online (Sandbox Code Playgroud)
或将此行添加到 xml 文件中的文本视图中
android:includeFontPadding="false"
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
43734 次 |
| 最近记录: |