Answers:
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
因此将考虑字体大小。
基于以下源代码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
。
谢谢@John Leehey和@PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
问题是,如果您在dimen.xml中将R.dimen.desired_sp定义为25
当接受的答案不起作用时(例如,在处理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