Jak automatycznie dostosować rozmiar tekstu w wielowierszowym widoku tekstowym zgodnie z maksymalnymi wymiarami widoku?

Szukałem sposobu automatycznego dopasowania tekstu w widoku tekstowym. Dzięki moim poszukiwaniom znalazłem wiele rozwiązań, takich jak:

FontFitTextViewAutoResizeTextViewAutoScale / Resize

Ale jak wiele innych nie rozwiązuje to mojego problemu. Nie działają zgodnie z oczekiwaniami, gdy używamy TextView z multilinią.

Zasadniczo moim celem jest ten:

Jak widać, tekst zmienia rozmiar na podstawie szerokości, wysokości, a także zwraca uwagę na podział linii, tworząc wielowierszowy widok tekstowy. Możesz także zmienić krój pisma.

Jednym z moich pomysłów na rozwiązanie tego było coś takiego:

int size = CONSTANT_MAX_SIZE;
TextView tv = (TextView) findViewById(R.id.textview1)
while(Math.abs(tv.getMeasuredHeight()) >= TEXTVIEW_MAX_HEIGHT) {
    size--;
    tv.setTextSize(size);
    tv.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);
    i++;
}

CONSTANT_MAX_SIZE to stała definiująca maksymalny rozmiar czcionki (poprawność tekstowa w TextView)

TEXTVIEW_MAX_HEIGHT jest stałą, która definiuje maksymalny rozmiar, jaki może mieć widok tekstowy.

Zostało to wywołane przy każdej zmianie tekstu w widoku tekstowym.

Plik tekstowy xml wyglądał mniej więcej tak:

<TextView
     android:id="@+id/textview1"
     android:layout_width="200dp"
     android:layout_height="wrap_content"
     android:singleLine="false"
     android:inputType="textMultiLine"
     android:text=""
     android:textSize="150sp" />

Ponieważ szerokość byłaby ograniczona w XML, tylko wysokość widoku musi być wzięta pod uwagę, ponieważ jego dostosowanie android automatycznie tworzy multilinię w razie potrzeby.

Chociaż jest to potencjalne rozwiązanie, nie działa idealnie (daleko od niego) i nie obsługuje zmiany rozmiaru (podczas usuwania tekstu).

Jakieś sugestie i / lub pomysły?

questionAnswers(6)

yourAnswerToTheQuestion