Предполагая, что вы уже искали другие варианты, и нет простого способа сделать это, вот теоретический (я не проверял) хакерский подход, который может сработать.
Создайте новый класс, расширяющий TextView. Затем переопределите метод, который будет вызываться после обновления содержимого TextView. Возможно, есть лучший способ для использования, но для этого примера давайте попробуем onDraw (). Этот метод будет проверять ширину и видеть, нужно ли иметь возможность прокручивать. Если это так, он обрезает строку и устанавливает текст. Он будет делать это в цикле, пока ему больше не понадобится прокрутка.
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(getWidth() < computeHorizontalScrollRange()){
// Requires scrolling, the string is too long
// Do whatever you need to do to trim the string, you could also grab the remaining string and do something with it.
// Set the TextView to use the trimmed string.
}
}
Вы хотели бы убедиться, что он не попал в бесконечный цикл, а также проверить, равна ли ширина нулю.
Вы также можете посмотреть различные варианты android:ellipsize
.