如果我给一个整数值,以改变某一文本的大小 TextView 使用代码,价值被解释为素(px).

现在没有人知道如何分配它在 sp?

有帮助吗?

解决方案

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; 

更清洁和更加可重复使用的方法是

定义的文本的大小 dimens.xml 文件里面 res/values/ 目录:

</resources>
   <dimen name="text_medium">14sp</dimen>
</resources>

然后将其应用到的 TextView:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));

基于上源代码 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()));
}

我建立的这个功能对于calulating任何尺寸像素为:

int getPixels(int unit, float size) {
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    return (int)TypedValue.applyDimension(unit, size, metrics);
}

在那里单元是一样的东西 TypedValue.COMPLEX_UNIT_SP.

通过默认setTextSize,没有单位的工作SP(秤素)

public void setTextSize (float size) 
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This 
size is adjusted based on the current density and user font size preference.

谢谢@约翰Leehey和@PeterH:

desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);

事情是如果定义R.地扪.desired_sp至25你dimen.xml

  1. 在非高清设备:desiredSp仍然是25、密度=1
  2. 在高清设备(如Nexus7第2代):desiredSp变为50岁上下,密度=2

当接受的回答没有工作(例如在处理与油漆)可以使用:

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

这是代码转换 PXSP 格式。100%的工作

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);

在尝试了所有的解决方案并没有给可接受的结果(也许是因为我工作上的设备与默认的非常大的字体),下面为我工作(COMPLEX_UNIT_DIP=设备独立素):

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);

从Api1级,可以使用 public void setTextSize (float size) 法。

从文件:

设置默认文本的大小,以给予价值,解释为"缩放 像素"的单元。这种大小的调整是根据目前的密度和 用户的字体大小的偏好。

参数:大小-->浮动:缩放的像素)。

所以你可以简单:

textView.setTextSize(12); // your size in sp

在情况如果任何人是在寻找科特林的方式,可以做

view.textSize = 12f
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top