我有同样的问题。 我刚刚解决了。
诀窍是使用TextView的getEditableText()方法。 它有一个replace()方法,甚至是一个delete()方法。 当你在其中追加getEditableText() ,TextView已经被标记为“editable”,这是使用getEditableText()所必需的。 我有这样的事情:
private final static int MAX_LINE = 50; private TextView _debugTextView; // Of course, must be filled with your TextView public void writeTerminal(String data) { _debugTextView.append(data); // Erase excessive lines int excessLineNumber = _debugTextView.getLineCount() - MAX_LINE; if (excessLineNumber > 0) { int eolIndex = -1; CharSequence charSequence = _debugTextView.getText(); for(int i=0; i
事情是, TextView.getLineCount()返回包装的行数,而不是文本中的“\ n”的数量…这就是为什么我清除整个文本,如果我到达文本的结尾,而寻求行删除。
您可以通过删除多个字符而不是删除多行来做到这一点。
此解决scheme跟踪列表中的日志行,并在每次更改时用该列表的内容覆盖textview。
private List errorLog = new ArrayList(); private static final int MAX_ERROR_LINES = 70; private TextView logTextView; public void addToLog(String str) { if (str.length() > 0) { errorLog.add( str) ; } // remove the first line if log is too large if (errorLog.size() >= MAX_ERROR_LINES) { errorLog.remove(0); } updateLog(); } private void updateLog() { String log = ""; for (String str : errorLog) { log += str + "\n"; } logTextView.setText(log); }
TextView显示通过setText()方法设置的内容。 所以这听起来像你应该减less你提供的input。
要清空TextView,你可以做setText("");
下面是一个例子,它将行添加到由设置的最大行限制的输出日志中。 每添加一行,滚动视图都会自动滚动到底部。 这个例子纯粹使用TextView的内容,所以它不需要单独的数据收集。
将以下内容添加到您的活动xml中:
在你的活动中添加下面的代码:
private static final int MAX_OUTPUT_LINES = 50; private static final boolean AUTO_SCROLL_BOTTOM = true; private TextView _textViewOutput; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); _textViewOutput = (TextView) findViewById(R.id.textViewOutput); } //call to add line(s) to TextView //This should work if either lineText contains multiple //linefeeds or none at all private void addLinesToTextView(String lineText) { _textViewOutput.append(lineText); removeLinesFromTextView(); if(AUTO_SCROLL_BOTTOM) _scrollView.post(new Runnable() { @Override public void run() { _scrollView.fullScroll(ScrollView.FOCUS_DOWN); } }); } // remove leading lines from beginning of the output view private void removeLinesFromTextView() { int linesToRemove = _textViewOutput.getLineCount() - MAX_OUTPUT_LINES; if (linesToRemove > 0) { for (int i = 0; i 我想你使用TextView.append(string)然后它会添加到旧文本。
如果您使用setText进行设置,则会replace旧文本
这是一个旧的,但我发现寻找解决我自己的问题。
我能够使用nameoflayout.removeAllViews();从LinearLayout删除所有的TextView nameoflayout.removeAllViews();
还有一种方法可以让你使用整数从布局的指定位置删除视图,它是: nameoflayout.removeViews(start, count); 所以我相信你可以创build一个超时的textviews保持可见多久。
不,android API不提供从textview中自动删除最早的行到API级别25的任何function。您需要在逻辑上做到这一点。
尝试编写一个函数,使TextView上的旧string,并添加新的string,然后得到子string的TextView能够最后的string。 并将其设置为TextView 。 像这样的东西:
String str &#61; textview.getText(); str &#43;&#61; newstring; int ln &#61; str.length(); ln &#61; ln-250; if (ln<0) ln&#61;0; str &#61; str.substring(ln); textview.setText(str);