Можно ли поменять блок на Paint.setTextSize()
? Насколько я знаю, это пиксель, но мне нравится устанавливать размер текста в DIP для поддержки нескольких экранов.
Как установить единицу измерения для Paint.setTextSize ()
Ответы (5)
Преобразуйте это так
// 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
Я знаю, что эта тема старая, и на нее уже дан ответ, но я также хотел бы предложить этот фрагмент кода:
int MY_DIP_VALUE = 5; //5dp
int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
MY_DIP_VALUE, getResources().getDisplayMetrics());
Принятый ответ - для жестов, а не для установки размера текста. Ответ с наибольшим количеством голосов (на момент написания этой статьи) близок, но в документации рекомендуется использовать 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);
Другие ссылки
- Как преобразовать DP, PX , SP между собой, особенно DP и SP?
- Android: размер текста Canvas.drawText () при разных разрешениях экрана < / а>
Paint.setTextSize
getDimensionPixelSize
myPaint.setTextSize(80)
), потому что в этом случае текст будет иметь одинаковую реальную ширину (например, 0,5) на всех устройствах (холст масштабирует его!) - даже если он, очевидно, не будет масштабирование с настройкой размера шрифта Android.
- person Neph; 14.05.2020
dp
значения 80
тот же результат, что и использование myPaint.setTextSize(80)
?
- person Suragch; 15.05.2020
dp
вместо sp
? Я только что протестировал это с dp
, но я получил тот же результат для обоих: _4 _ / _ 5_ дайте мне ок. тот же результат, что и myPaint.setTextSize(80)
- по крайней мере, с более крупным Pixel XL. На меньшем Nexus One текст слишком мелкий, чтобы его можно было прочитать.
- person Neph; 15.05.2020
А вот еще более короткий метод преобразования dp-s в px-els с учетом показателей отображения.
Если ваш объект Paint используется для рисования текста на холсте, вы можете позволить холсту обрабатывать масштабирование за вас.
При вызове _ 1_ размер текста сначала определяется переданным в Paint
объектом, который можно установить с помощью _ 3_. Размер текста автоматически масштабируется на Canvas
в зависимости от плотности холста, которую можно найти с помощью _ 5_.
При установке размера текста на объекте рисования, который будет рисоваться на холсте, работайте со значением единицы измерения dp
или sp
, и пусть Canvas выполнит масштабирование за вас.
Paint.setTextSize(float textSize)
textSize
- значение пикселя. Мне не кажется очевидным, что это автоматически масштабируется. Если бы это было так, я бы подумал, что в документации сказано, что единицы измерения - это sp
или dp
, а не пиксели.
- person Suragch; 06.02.2017
Canvas.drawText()
. Я тестировал разные решения, но предложения вроде getDimensionPixelSize(R.dimen.fontSize)
не работают должным образом: <dimen name="fontSize">22sp</dimen>
отлично смотрится на Pixel XL (1440x2560, 560dpi), на Nexus 4 (768x1280, xhdpi = 320dpi) он заметно меньше, но на Nexus One (480x800, hdpi) = 240 точек на дюйм) он крошечный / больше не читается. TextView
s масштабируются автоматически, но холст также обрабатывает определенное масштабирование: он не будет реагировать на изменения в настройках шрифта Android, но гарантирует, что размер текста будет одинаковым на всех устройствах (например, шириной 0,5).
- person Neph; 14.05.2020