Android: Canvas.drawText () размер текста на разных разрешениях экрана - PullRequest
32 голосов
/ 20 марта 2011

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

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

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

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

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

Ответы [ 4 ]

77 голосов
/ 20 марта 2011

Самый простой способ - определить размеры шрифта в ваших ресурсах с помощью единиц измерения, не зависящих от масштаба (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 на Дополнительные ресурсы .

4 голосов
/ 22 июня 2011

Самый простой способ - определить размер шрифта в каталоге ресурсов с единицами 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> будет использоваться в качестве идентификатора ресурса.

1 голос
/ 11 марта 2017

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

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

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

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

relation = relation / 250;

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

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

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

1 голос
/ 11 февраля 2016

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

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

...