android textview清除,如何删除TextView的旧行

我有同样的问题。 我刚刚解决了。

诀窍是使用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 < linesToRemove; i++) { Editable text = _textViewOutput.getEditableText(); int lineStart = _textViewOutput.getLayout().getLineStart(0); int lineEnd = _textViewOutput.getLayout().getLineEnd(0); text.delete(lineStart, lineEnd); } } }

我想你使用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 = textview.getText(); str += newstring; int ln = str.length(); ln = ln-250; if (ln<0) ln=0; str = str.substring(ln); textview.setText(str);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值