将EditText的文本大小从像素更改为缩放像素

时间:2012-07-22 23:32:00

标签: android android-edittext text-size

我正在为文字大小提供一个选项,其中一个用于EditText框。我已使用EditText#getTextSize()确定原始文字大小。结果以像素给出。用户选择文字大小后,我会使用edittext.setTextSize(TypedValue.COMPLEX_UNIT_SP, chosen)来应用文字大小。

问题是不同的屏幕尺寸给我带来截然不同的文字大小,例如:在ICS手机上,EditText.getTextSize()返回36,这绝对是巨大的,绝对不是整个系统中使用的默认文本大小。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

由于屏幕密度不同以及从getTextSize()获得的值以像素为单位(px),您可能会看到不同的值。密度无关像素(dp)和缩放像素(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;
}

或者这(我从this post获得):

public static float pixelsToSp(Context context, Float px) {
    float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
    return px/scaledDensity;
}