-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathScreenUtil.java
124 lines (105 loc) · 3.91 KB
/
ScreenUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.example.user.utils.sys;
import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.util.Log;
import java.lang.reflect.Field;
public class ScreenUtil {
private static final String TAG = "ScreenUtil";
private static double RATIO = 0.85;
public static int screenWidth;
public static int screenHeight;
public static int screenMin;// 宽高中,小的一边
public static int screenMax;// 宽高中,较大的值
public static float density;
public static float scaleDensity;
public static float xdpi;
public static float ydpi;
public static int densityDpi;
public static int dialogWidth;
public static int statusbarheight;
public static int navbarheight;
public static int dip2px(float dipValue) {
return (int) (dipValue * density + 0.5f);
}
public static int px2dip(float pxValue) {
return (int) (pxValue / density + 0.5f);
}
public static int sp2px(float spValue) {
return (int) (spValue * scaleDensity + 0.5f);
}
public static int getDialogWidth() {
dialogWidth = (int) (screenMin * RATIO);
return dialogWidth;
}
public static void init(Context context) {
if (null == context) {
return;
}
DisplayMetrics dm = context.getApplicationContext().getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
screenMin = (screenWidth > screenHeight) ? screenHeight : screenWidth;
density = dm.density;
scaleDensity = dm.scaledDensity;
xdpi = dm.xdpi;
ydpi = dm.ydpi;
densityDpi = dm.densityDpi;
Log.d(TAG, "screenWidth=" + screenWidth + " screenHeight=" + screenHeight + " density=" + density);
}
public static int getDisplayWidth() {
if (screenWidth == 0) {
GetInfo(DemoCache.getContext());
}
return screenWidth;
}
public static int getDisplayHeight() {
if (screenHeight == 0) {
GetInfo(DemoCache.getContext());
}
return screenHeight;
}
public static void GetInfo(Context context) {
if (null == context) {
return;
}
DisplayMetrics dm = context.getApplicationContext().getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
screenMin = (screenWidth > screenHeight) ? screenHeight : screenWidth;
screenMax = (screenWidth < screenHeight) ? screenHeight : screenWidth;
density = dm.density;
scaleDensity = dm.scaledDensity;
xdpi = dm.xdpi;
ydpi = dm.ydpi;
densityDpi = dm.densityDpi;
statusbarheight = getStatusBarHeight(context);
navbarheight = getNavBarHeight(context);
Log.d(TAG, "screenWidth=" + screenWidth + " screenHeight=" + screenHeight + " density=" + density);
}
public static int getStatusBarHeight(Context context) {
if (statusbarheight == 0) {
try {
Class<?> c = Class.forName("com.android.internal.R$dimen");
Object o = c.newInstance();
Field field = c.getField("status_bar_height");
int x = (Integer) field.get(o);
statusbarheight = context.getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
}
}
if (statusbarheight == 0) {
statusbarheight = ScreenUtil.dip2px(25);
}
return statusbarheight;
}
public static int getNavBarHeight(Context context) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
}
}