如果我使用java代码分配一个整数值来改变TextView的某个文本大小,该值将被解释为像素(px)。

有人知道如何在sp中赋值吗?


当前回答

这是转换PX到SP格式的代码。 100%的工作

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);

其他回答

在尝试了所有的解决方案,没有一个给出可接受的结果(可能是因为我在一个默认非常大的字体的设备上工作),下面的方法对我有用(COMPLEX_UNIT_DIP =设备独立像素):

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);

更干净和更可重用的方法是

在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));

http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29

例子:

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);

你可以使用DisplayMetrics对象通过scaledDensity属性在像素和缩放像素之间进行转换。

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity; 
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
                       context.getResources().getDimension(R.dimen.text_size_in_dp))