Можно ли изменить устройство на Paint.setTextSize()
? Насколько я знаю, это пиксель, но мне нравится устанавливать размер текста в DIP для поддержки нескольких экранов.
Как установить блок для Paint.setTextSize()
Ответ 1
Преобразуйте его так:
// 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
Ответ 2
Я знаю, что эта тема старая и уже ответила, но я также хотел бы предложить этот фрагмент кода:
int MY_DIP_VALUE = 5; //5dp
int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
MY_DIP_VALUE, getResources().getDisplayMetrics());
Ответ 3
Принятый ответ - для жестов, а не для задания размера текста. Самый высокий голосовой ответ (на момент написания этой статьи) близок, но в документации рекомендуется использовать sp
, а не dp
, потому что помимо масштабирования для плотности экрана (в качестве значений dp
), sp
также масштабируется в соответствии с предпочтительными размерами шрифта пользователя. Ответ @pelotasplus работает только в том случае, если вы получаете значение из ресурсов.
Из 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);
Другие ссылки
Ответ 4
И вот еще более короткий метод для преобразования dp-s в px-els с учетом отображаемых показателей
Ответ 5
Если ваш объект Paint используется для рисования текста на холсте, вы можете позволить масштабировать ручку Canvas для вас.
При вызове Canvas.drawText()
размер текста сначала определяется переданным в объекте Paint
, который может быть установлен через Paint.setTextSize()
. Размер текста автоматически масштабируется Canvas
на основе плотности холста, которую можно найти с помощью Canvas.getDensity()
.
При настройке размера текста для объекта рисования, который будет нарисован на Canvas, работайте с единичным значением dp
или sp
и пусть Canvas обрабатывает масштабирование для вас.