Как установить блок для Paint.setTextSize()

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

Ответ 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);

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

Ответ 5

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

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

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