bartwell
@bartwell

Возможно ли автомасштабирование текста?

Есть разметка, в ней страница разбита на две части — заголовок и тело. Заголовок содержит строку текста и рисунок справа. Высота заголовка может быть изменена. Соответственно, текст и рисунок внутри заголовка должны будут смаштабироваться под новую высоту. Рисунок нормально масштабируется, а вот текст не хочет изменять свой размер… Возможно ли это как реализовать внутри разметки?


Код:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:ignore="UseCompoundDrawables" >

        <TextView
            android:id="@+id/title_text"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/app_name" />

        <ImageView
            android:id="@+id/edit_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/edit"
            android:src="@drawable/widget_edit" />
    </LinearLayout>

    <TextView
        android:id="@+id/content_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
  • Вопрос задан
  • 3061 просмотр
Решения вопроса 1
AChep
@AChep
Да, возможно

private float getSizeFitText(String text, int textWidth) {
		Paint mTestPaint = new Paint();

		if (textWidth <= 0)
			return 0;
		int targetWidth = textWidth;
		float hi = 100;
		float lo = 2;
		final float threshold = 0.5f; // How close we have to be

		while ((hi - lo) > threshold) {
			float size = (hi + lo) / 2;
			mTestPaint.setTextSize(size);
			if (mTestPaint.measureText(text) >= targetWidth)
				hi = size; // too big
			else
				lo = size; // too small
		}
		// Use lo so that we undershoot rather than overshoot
		return lo - 10;
	}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы