Android: Canvas.drawText() размер текста на разных разрешениях экрана

Для моей игры для Android у меня есть несколько звонков Canvas.drawText(),

Для тестирования я использую стандартный размер шрифта, который, кажется, работает нормально.

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

Есть ли простой способ подсчитать, какой размер текста должен быть нарисован, или я должен сделать это вручную?

редактировать: какой смысл редактировать мой пост @Suragch?

4 ответа

Решение

Самый простой способ - определить размеры шрифта в ресурсах с помощью единиц измерения, не зависящих от масштаба (sp) - этот блок похож на независимые от плотности пиксели (dp или же dip) в том смысле, что он учитывает плотность экрана, но также учитывает настройку размера шрифта пользователя.

Чтобы добавить новое измерение, создайте dimens.xml файл в вашем res/values папку и введите следующий код, чтобы добавить новое измерение с именем myFontSize:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="myFontSize">20sp</dimen>
</resources>

Затем вы можете получить размер текста в вашем приложении, используя

int scaledSize = getResources().getDimensionPixelSize(R.dimen.myFontSize);

Полученный размер будет правильно масштабирован с учетом текущей плотности экрана и размера шрифта.

Для получения дополнительной информации см. Страницу разработчиков Android на Дополнительные ресурсы.

Вы можете сделать это самостоятельно, используя простую математическую операцию:

Вам нужно вычислить отношение, которое рисует ваш текст одинакового размера для любого размера холста, поэтому используйте фактический размер холста, например так:

double relation = Math.sqrt(canvas.getWidth() * canvas.getHeight());

Но это число слишком велико, поэтому разделите его на число, которое соответствует вашим потребностям, скажем, 250:

relation = relation / 250;

Теперь вы можете установить свой размер текста следующим образом:

paint.setTextSize((float) (myFontSize * relation));

Вам не нужно делить отношение на любое число, но в этом случае вам придется использовать очень маленький размер шрифта для переменной myFontSize, Для меня 250 прекрасно работает, используя обычные размеры шрифта, которые будут подстраиваться под любой размер экрана, так как вы уже учитываете размеры в пикселях вашего холста.

Самый простой способ - определить размер шрифта в каталоге ресурсов с единицами измерения: scale-independent pixel (sp) или density-independent pixel (dp), Затем получите размер текста, используя

int scaledSize = getResources().getDimensionPixelSize(R.dimen.font_size);
mTextView.setTextSize(scaledSize);

Это позволит соответствующим образом масштабировать размер текста в соответствии с текущей плотностью / разрешением экрана и настройкой размера шрифта пользователя.

Как определить размер шрифта в каталоге ресурсов?

Создайте файл с именем dimens.xml в папке res->values, Затем скопируйте следующий код.

<resources>
    <dimen name="font_size">25sp</dimen>   // sp or dp accordingly
</resources>

name атрибут тега <dimen> будет использоваться в качестве идентификатора ресурса.

При звонке Canvas.drawText() размер текста сначала определяется переданным в Paint объект, который можно установить через Paint.setTextSize(), Размер текста автоматически масштабируется Canvas на основе плотности холста, которая может быть найдена с помощью Canvas.getDensity(),

При настройке размера текста для объекта рисования, который будет отображаться в Canvas, используйте значение единицы dp или же sp и пусть Canvas справится с масштабированием для вас.

Другие вопросы по тегам