Вычислить размер текста на основе высоты TextView
У меня есть TextView внутри HorizontalScrollView, как показано ниже. В настоящее время я использую фиксированный размер текста. Теперь я хотел бы рассчитать максимальный размер текста, который я могу использовать без превышения размера текста над высотой TextView. Обратите внимание, что ширина текста не является проблемой, поскольку TextView является дочерним элементом HorizontalScrollView, поэтому текст становится прокручиваемым, как только он расширяет допустимую ширину.
<HorizontalScrollView
android:id="@+id/horizontal_scroll_view_equation"
android:scrollbars="none"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:fillViewport="true"
android:layout_gravity="right">
<LinearLayout
android:layout_gravity="right"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="vertical">
<TextView
android:layout_marginRight="@dimen/spacing_medium"
android:layout_marginLeft="@dimen/spacing_medium"
android:id="@+id/text_view_equation"
android:background="@android:color/transparent"
android:gravity="center_vertical|right"
android:layout_gravity="right"
android:maxLines="1"
android:textSize="@dimen/font_xxxlarge"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</HorizontalScrollView>
Я просматривал сообщения на Stackru и других форумах, но смог найти только сообщения, которые учитывают как ширину, так и высоту.
Есть ли простое решение для расчета максимального размера текста на основе высоты TextView?
1 ответ
Я сам нашел ответ. Решение следующее. Во-первых, я создал собственный TextView, как показано ниже.
import android.content.Context;
import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatTextView;
public class AutoSizeTextView extends AppCompatTextView {
public AutoSizeTextView(Context context) {
super(context);
}
public AutoSizeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AutoSizeTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
this.getPaint().setTextSize(h * 0.75f);
invalidate();
}
}
А затем я использовал этот TextView как дочерний элемент в моем HorizontalScrollView, как показано ниже.
<HorizontalScrollView
android:id="@+id/horizontal_scroll_view_equation"
android:scrollbars="none"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp"
android:fillViewport="true"
android:layout_gravity="right">
<LinearLayout
android:layout_gravity="right"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:orientation="vertical">
<com.yourpackage.AutoSizeTextView
android:layout_marginRight="@dimen/spacing_medium"
android:layout_marginLeft="@dimen/spacing_medium"
android:id="@+id/text_view_equation"
android:background="@android:color/transparent"
android:gravity="center_vertical|right"
android:layout_gravity="right"
android:maxLines="1"
android:textSize="@dimen/font_xxxlarge"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</HorizontalScrollView>