android-ui - 设计师给的布局和字体尺寸单位为px,在写代码的时候要如何转换成Android用的dp和sp ?
巴扎黑
巴扎黑 2017-04-17 17:59:24
0
4
702

问题如题描述,设计给的尺寸都是px的,而且也不告诉他们在什么尺寸和分辨率的屏幕上做的设计?作为程序员要如何转换单位?

我不是在问px与dp之间如何转换的问题。而是由设计师的px如何转换成写在xml里的dp的问题。

巴扎黑
巴扎黑

全部回覆(4)
阿神
非战斗人员请远离, 现在开撕!

遇到題主這種情況, 你只能告訴你們美工(這裡不能叫他們為設計師): 這做不了!!!

但凡設計App UI, 都是要在一個主流的標準分辨率下來設計的, 然後你才能找到對應的屏幕密度, 最後才能進行px到dpi的轉換.
如果脫離這個原則, 那就是耍流氓, 最後你實現出來失了真, 和UI設計稿相去甚遠, 那都不是你的事.

參考資料:
Device Metrics

運算方法:
知道了設計稿的分辨率, 以及該分辨率一般對應的屏幕密度後, 按如下公式計算:

dpi = px / density

p.s. density 即為Device Metrics 中對應Density一列的值
p.p.s. 答主不要在看這個熱血的回復之後, 就熱血地和你們美工去撕逼了呀, 有事還是要好好說的[摀臉] [認慫] 2333

洪涛

首先要知道設計圖中的屏幕尺寸是多少
一般都是1080x1980(?或者其他), 通常都屬於xxhdpi, 也就是1dp相當於3px
如果設計圖屏幕寬只有480(或者左右),1dp應該就是1px了

Peter_Zhu

1dp定義為螢幕密度值為160ppi時的1px,即,在mdpi時,1dp = 1px。 以mdpi為標準,這些螢幕的密度值比為:ldpi : mdpi : hdpi : xhdpi : xxhdpi = 0.75 : 1 : 1.5 : 2 : 3;即,在xhdpi的密度下,1dp=2px;在hdpi情況下, 1dp=1.5px。其他類推。

1dp=(螢幕ppi/ 160)px

原文連結

PHPzhong

public static float px2dp(Context context, float pxVal)

{
    final float scale = context.getResources().getDisplayMetrics().density;
    return (pxVal / scale);
}

轉換方法: px ---> dp

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板