如果我使用java代码分配一个整数值来改变TextView的某个文本大小,该值将被解释为像素(px)。
有人知道如何在sp中赋值吗?
如果我使用java代码分配一个整数值来改变TextView的某个文本大小,该值将被解释为像素(px)。
有人知道如何在sp中赋值吗?
当前回答
在尝试了所有的解决方案,没有一个给出可接受的结果(可能是因为我在一个默认非常大的字体的设备上工作),下面的方法对我有用(COMPLEX_UNIT_DIP =设备独立像素):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
其他回答
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
更干净和更可重用的方法是
在res/values/ directory中的dimensions .xml文件中定义文本大小:
<resources>
<dimen name="text_medium">14sp</dimen>
</resources>
然后应用到TextView:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
你可以使用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。
从Api级别1开始,你可以使用公共void setTextSize (float size)方法。
从文档中可以看到:
将默认文本大小设置为给定值,解释为“缩放” 像素”单位。这个大小是根据电流密度和来调整的 用户字体大小首选项。 参数: size -> float:缩放后的像素大小。
所以你可以简单地做:
textView.setTextSize(12); // your size in sp