形象讲解Android中dpi,dp和px之间的关系(设计师如何与程序员沟通)

屏幕尺寸指屏幕(显示屏)对角线的长度,单位为英寸。dpi(dots per inch 像素密度)指每英寸中的像素数.


(1)在android中,160dpi设备下,1px = 1dp,160dpi表示一英寸中包含160个像素点(px),即把一英寸平均分成160个单元格,每个单元格就有一个像素。如果我们把这160个单元格的单位设为dp,则1dp=1px;

(2)假设我的设备的分辨率为1080*1920,尺寸为5英寸,则我的设备的像素密度为,即一英寸中包含440个像素点(px),如果把一英寸平均分成160个单元格,则每个单元格有440/160 = 2.75个像素。如果我们把这160个单元格的单位设为dp,即1dp = 2.75px;

(3)因为把一英寸分为160个单元格,所以无论在160dpi或者440dpi下,一个单元格的长度都为1/160英寸,即1dp都为1/160英寸。所以,当我们用dp作为长度单位时,相同dp值下,在任何设备上肉眼看到的都是相同的长度。即在440dpi或者160dpi设备下,160dp都为一英寸.

(4)从(2)中,“每个单元格有440/160 = 2.75个像素”,我们可以得到换算公式,1像素 = 1单元*(440/160),即px = dp*(dpi/160);


android中获取dpi:

  DisplayMetrics dm = new DisplayMetrics();
  activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
  screenWidth = dm.widthPixels;
  screenHeight = dm.heightPixels;
  // dpi
  densityDpi = dm.densityDpi;
  // dm.density = dpi/160;
  density = dm.density;

ps: 设计师如何与程序员沟通?

设计师会说明设计稿的UI是按照某种分辨率的和屏幕尺寸的手机来设计,如设计师会说明“该ui的分辨率为1080*1920,5英寸“,根据换算公式得到像素密度为440dpi , 1dp = 440/160 = 2.75px。所以程序员在实现UI时,如果布局文件是以dp为单位,则把设计图上标注的像素尺寸除以3(2.75约为3)即可。即如果设计图上某个组件标出的宽度为300px,那么我们在布局时设置宽度为300px/3=100dp。

下图例子是设计图中的一部分,数字的单位为px:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章