Відповіді:
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
атрибутом .
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
may be adjusted in smaller increments at runtime based on a user preference for the font size
те, що розмір шрифту буде врахований.
Чистіший і багаторазовий підхід
визначити розмір тексту у dimens.xml
файлі всередині res/values/
каталогу:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
а потім застосуйте його до TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
На основі вихідного коду setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
Я будую цю функцію для оцінювання будь-якого зображення в пікселях:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
Де одиниця - щось подібне TypedValue.COMPLEX_UNIT_SP
.
За замовчуванням setTextSize, без одиниць роботи в SP (масштаб пікселя)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
Дякую @John Leehey та @PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
Річ у тім, якщо ви визначите R.dimen.desired_sp до 25 у вашій мірі.xml
Якщо прийнята відповідь не працює (наприклад, при роботі з Paint), ви можете використовувати:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
COMPLEX_UNIT_PX
вам потрібно розділити щільність.
Це код для перетворення PX у формат SP . 100% працює
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
З рівня Api 1, ви можете використовувати public void setTextSize (float size)
метод.
З документації:
Встановіть за замовчуванням розмір тексту для заданого значення, інтерпретується як "масштабований піксель" одиниць. Цей розмір регулюється виходячи з щільності струму та переваг розміру шрифту користувача.
Параметри: size -> float: Масштабований розмір пікселя.
Тож ви можете просто зробити:
textView.setTextSize(12); // your size in sp