Если я присваиваю целочисленное значение для изменения определенного размера текста с TextView
использованием кода Java, значение интерпретируется как pixel ( px
).
Теперь кто-нибудь знает, как его назначить sp
?
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Пример:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
получение размера текста таким образом уже преобразует SP в PX, принимая во внимание как плотность экрана, так и масштабный коэффициент текста.Вы можете использовать
DisplayMetrics
объект, чтобы помочь преобразовать между пикселями и масштабированными пикселями сscaledDensity
атрибутом .источник
may be adjusted in smaller increments at runtime based on a user preference for the font size
что размер шрифта будет учитываться.Более чистый и многократно используемый подход
определить размер текста в
dimens.xml
файле внутриres/values/
каталога:и затем примените это к
TextView
:источник
На основании исходного кода
setTextSize
:Я строю эту функцию для вычисления любого измерения в пикселях:
Где юнит что то типа
TypedValue.COMPLEX_UNIT_SP
.источник
По умолчанию setTextSize, без единиц работы в SP (масштабирует пиксель)
источник
Спасибо @Джон Лихи и @PeterH:
Дело в том, что вы определяете R.dimen.desired_sp для 25 в вашем измерениях.
источник
Когда принятый ответ не работает (например, при работе с Paint), вы можете использовать:
источник
источник
COMPLEX_UNIT_PX
вам нужно разделить плотность.Это код для преобразования формата PX в SP . 100% работает
источник
После того, как были опробованы все решения, но ни одно из них не дало приемлемых результатов (возможно, из-за того, что я работал на устройстве с очень большими шрифтами по умолчанию), у меня сработало следующее (COMPLEX_UNIT_DIP = Независимые от устройства пиксели):
источник
С уровня API 1, вы можете использовать
public void setTextSize (float size)
метод.Из документации:
Так что вы можете просто сделать:
источник