2012-07-22 29 views
0

我提供了一個用於文本大小的選項,其中一個用於EditText框。我已使用EditText#getTextSize()確定原始文字大小。結果以像素爲單位給出。一旦用戶選擇文本大小,我使用edittext.setTextSize(TypedValue.COMPLEX_UNIT_SP, chosen)來應用文本大小。將EditText的文本大小從像素更改爲縮放像素

問題是不同的屏幕尺寸給了我非常不同的文字大小,例如,在ICS電話上,EditText.getTextSize()返回36,這絕對是巨大的,絕對不是整個系統使用的默認文本大小。

我在做什麼錯?

回答

2

由於屏幕密度不同以及您從getTextSize()獲得的值以像素(px)爲單位的事實,您可能會看到不同的值。密度獨立像素(dp)和縮放像素(sp)被調整爲獨立於屏幕密度,它們是您應該使用的。要獲得DP或SP從PX你可以使用一個簡單的轉換是這樣的:

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; 
} 
+0

謝謝,我用'#的TypedValue .. applyDimension ..' – 2012-07-23 22:18:37