У меня была такая же проблема.Я только что решил.
Хитрость заключается в использовании метода getEditableText()
TextView.У него есть метод replace()
, даже метод delete()
.Когда вы добавляете в него строки, TextView уже помечается как «редактируемый», что необходимо для использования 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<excessLineNumber; i++) {
do {
eolIndex++;
} while(eolIndex < charSequence.length() && charSequence.charAt(eolIndex) != '\n');
}
if (eolIndex < charSequence.length()) {
_debugTextView.getEditableText().delete(0, eolIndex+1);
}
else {
_debugTextView.setText("");
}
}
}
Дело в том, TextView.getLineCount()
возвращает количество обернутых строк, а не число "\ n" в тексте ... Именно поэтому я очищаювесь текст, если я доберусь до конца текста при поиске строк для удаления.
Вы можете сделать это по-другому, удалив несколько символов вместо стирания количества строк.