Как установить модуль для Paint.setTextSize () - PullRequest
55 голосов
/ 17 июня 2010

Можно ли поменять единицу на Paint.setTextSize()? Насколько я знаю, это пиксель, но мне нравится устанавливать размер текста в DIP для поддержки нескольких экранов.

Ответы [ 5 ]

90 голосов
/ 14 июня 2012

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

int MY_DIP_VALUE = 5; //5dp

int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
                              MY_DIP_VALUE, getResources().getDisplayMetrics());
45 голосов
/ 17 июня 2010

Преобразуйте это так

// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;

// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);

// Use mGestureThreshold as a distance in pixels

отсюда http://developer.android.com/guide/practices/screens_support.html#dips-pels

22 голосов
/ 06 февраля 2017

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

Из int в коде

int spSize = 17;
float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity;
mTextPaint.setTextSize(scaledSizeInPixels);

Или альтернативно

int spSize = 17;
float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
        spSize, getResources().getDisplayMetrics());
mTextPaint.setTextSize(scaledSizeInPixels);

Из ресурсов

Или, если у вас есть sp или dp значение в ресурсах:

<resources>
    <dimen name="fontSize">17sp</dimen>
</resources>

с

float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize);
mTextPaint.setTextSize(scaledSizeInPixels);

Другие ссылки

3 голосов
/ 17 февраля 2014

А вот еще более короткий метод преобразования dp-s в px-els с учетом показателей отображения

https://developer.android.com/reference/android/content/res/Resources.html#getDimensionPixelSize(int)

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

Если ваш объект Paint используется для рисования текста на холсте, вы можете позволить Canvas обрабатывать масштабирование для вас.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...