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

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


当前回答

semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
                       context.getResources().getDimension(R.dimen.text_size_in_dp))

其他回答

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

谢谢@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

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

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);

当接受的答案不起作用时(例如在处理Paint时),您可以使用:

float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);