0

我提供了一个文本大小选项,其中一个是用于EditText框的。我已经使用EditText#getTextSize(). 结果以像素为单位。一旦用户选择了文本大小,我就使用它edittext.setTextSize(TypedValue.COMPLEX_UNIT_SP, chosen)来应用文本大小。

问题是不同的屏幕尺寸给了我非常不同的文本大小,例如在 ICS 电话上,EditText.getTextSize()返回 36,这绝对是巨大的,绝对不是整个系统使用的默认文本大小。

我究竟做错了什么?

4

1 回答 1

2

由于屏幕密度不同以及从 getTextSize() 获得的值以像素 (px) 为单位,您可能会看到不同的值。Density Independent Pixels(dp) 和 Scaled Pixels(sp) 被调整为独立于屏幕密度,它们是您应该使用的。要从 px 获取 dp 或 sp,您可以使用如下简单的转换:

public static float pxToDp( float px, Context context ) {
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float dp = px / ( metrics.densityDpi / 160f );
    return dp;
}

或者这个(我从这篇文章中得到的):

public static float pixelsToSp(Context context, Float px) {
    float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
    return px/scaledDensity;
}
于 2012-07-23T00:01:06.870 回答