Как масштабировать некоторый текст в зависимости от размера его контейнера?

#android #textview

#Android #textview

Вопрос:

У меня есть textview, который я хотел бы масштабировать по мере роста контейнера. мне нужно поддерживать соотношение сторон по мере увеличения контейнера. как это можно сделать?

обычно мы задаем размер textview в sp, но для этого я хочу, чтобы textview был пропорционален в зависимости от размера его контейнера. В ConstraintLayout я делаю следующее:

 <TextView
android:id="@ id/tv"
android:layout_width="0dp"
android:layout_height="0dp"
android:gravity="center_vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/glStart"
app:layout_constraintRight_toLeftOf="@id/glEnd"
app:layout_constraintTop_toTopOf="parent"
tools:text="My textview" />
  

который ограничивает textview, но не ограничивает сам текст:

введите описание изображения здесь

как я могу заставить текст ограничиваться верхней и нижней частью контейнера вместо моего значения sp?

Ответ №1:

Добавьте эти атрибуты в свой TextView в свой макет

     android:autoSizeTextType="uniform"
    android:autoSizeMinTextSize="12sp"
    android:autoSizeMaxTextSize="50sp"
    android:autoSizeStepGranularity="2sp"
  

Ответ №2:

Разные телефоны имеют разный размер и плотность экрана, поэтому, когда вы указываете размер текста для просмотра в sp, он не будет реагировать и настраиваться в соответствии с размером контейнера.


Я думаю, что вы можете использовать библиотеку ssp и сохранить свои ограничения как есть.

Библиотека Android, которая предоставляет новую единицу измерения размера — ssp (scalable sp). Эта единица измерения размера масштабируется с размером экрана на основе единицы измерения размера sp (для текстов). Это может помочь разработчикам Android с поддержкой нескольких экранов.

Из документов:

зависимости

 dependencies {
  implementation 'com.intuit.ssp:ssp-android:1.0.6'
}
  

Как использовать

Просто добавьте в свой TextView нужные вам размеры (но в ssp), и он будет масштабироваться вверх / вниз в соответствии с вашим контейнером

 android:textSize="@dimen/_40ssp"
  

Другим простым вариантом было бы использовать автоматическое масштабирование TextViews