如果我使用java代码分配一个整数值来改变TextView的某个文本大小,该值将被解释为像素(px)。
有人知道如何在sp中赋值吗?
如果我使用java代码分配一个整数值来改变TextView的某个文本大小,该值将被解释为像素(px)。
有人知道如何在sp中赋值吗?
当前回答
你可以使用DisplayMetrics对象通过scaledDensity属性在像素和缩放像素之间进行转换。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
其他回答
根据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。
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
例子:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
谢谢@John Leehey和@PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
如果你在你的dimension .xml中定义r . dimension .desired_sp为25
在非高清设备上: desiredSp仍然是25,密度= 1 在高清设备上(如Nexus 7第二代): desiredSp变成50左右,密度= 2
你可以使用DisplayMetrics对象通过scaledDensity属性在像素和缩放像素之间进行转换。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;