【來源】ExMobi 二次開發手冊ui
手機屏幕根據密度範圍分爲五種:低、中、高、超高、超超高,爲了確保界面元素在不一樣的屏幕都能合適的展現,在設計界面元素的 UI 時,UI 工程師建議統一採用 dpi (Dots Per Inch) 來定義界面元素。spa
計算手機dpi,須要知道手機屏幕尺寸和手機分辨率。即設計
手機分辨率 | 屏幕尺寸(Inch) | 實際 DPI | 分屏 | DPI 值 |
480 x 800 | 4 英寸 | 233 | 高分屏 [188,300) | 240 |
480 x 854 | 3.7 英寸 | 265 | 高分屏 [188,300) | 240 |
1024 x 768 | 9.7 英寸 | 132 | 中分屏 [121,188) | 160 |
320 x 480 | 3.5 英寸 | 165 | 中分屏 [121,188) | 160 |
640 x 960 | 3.5 英寸 | 330 | 超高分屏 [300,420) | 320 |
1920 x 1080 | 5 英寸 | 440 | 超超高分屏 [420, ) | 480 |
【示例】code
三星 i9000,屏幕尺寸 4 英寸,分辨率 480 * 800。套入公式blog
計算結果取近似值 233,即三星 i9000 的 dpi 爲 233。介於高分屏區間 [188,300],因此取 240.圖片
在實際設計中,UI 度量單位以 640*960 設計圖爲基準,測量實際尺寸除以 2。如今以 720*1280 設計圖爲基準。開發
1 /** 2 * 得到屏幕相對的寬度和高度<br /> 3 * 橫屏時候寬度大於高度,豎屏時候高度大於寬度 4 * 5 * param windowManager 6 * return <br /> 7 * point.x:寬度,point.y:高度 8 */ 9 @SuppressLint("NewApi") 10 public static Point getScreenSize(WindowManager windowManager) { 11 Point point = new Point(0, 0); 12 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) { 13 point.x = windowManager.getDefaultDisplay().getWidth(); 14 point.y = windowManager.getDefaultDisplay().getHeight(); 15 } else { 16 windowManager.getDefaultDisplay().getSize(point); 17 } 18 19 return point; 20 }
得到屏幕的寬度和密度
public static int getScreenWidth(Context context) { WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getWidth(); } public static float getScreeDensity(Context context){ WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics metric = new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(metric); float density = metric.density; // 密度(0.75 / 1.0 / 1.5 / 2.0) //int densityDpi = metric.densityDpi; return density; }
根據屏幕大小調整尺寸get
1 // 根據屏幕和圖片大小調整顯示尺寸 2 int justShowViewHeight = mScreenSize.x * 150 / 640; 3 LayoutParams justShowParams = mJustShowImg.getLayoutParams(); 4 justShowParams.height = justShowViewHeight; 5 mJustShowImg.setLayoutParams(justShowParams); 6 Picasso.with(mActivity).load(R.drawable.fragment_main_justshow).into(mJustShowImg);