AdaptScreenUtils.java
3.8 KB
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
125
126
127
128
129
130
131
package com.wd.basemusic.utils;
import android.content.res.Resources;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import com.wd.foundation.wdkit.base.BaseApplication;
import com.wd.foundation.wdkit.utils.SpUtils;
import java.lang.reflect.Field;
/**
* <pre>
* author: Blankj
* blog : http://blankj.com
* time : 2016/09/23
* desc : AdaptScreenUtils
* </pre>
*/
public final class AdaptScreenUtils {
private static boolean isInitMiui = false;
private static Field mTmpMetricsField;
/**
* Adapt for the horizontal screen, and call it in [android.app.Activity.getResources].
*/
public static Resources adaptWidth(Resources resources, int designWidth) {
DisplayMetrics dm = getDisplayMetrics(resources);
float newXdpi = dm.xdpi = (dm.widthPixels * 72f) / designWidth;
setAppDmXdpi(newXdpi);
return resources;
}
/**
* Adapt for the vertical screen, and call it in [android.app.Activity.getResources].
*/
public static Resources adaptHeight(Resources resources, int designHeight) {
DisplayMetrics dm = getDisplayMetrics(resources);
float newXdpi = dm.xdpi = (dm.heightPixels * 72f) / designHeight;
setAppDmXdpi(newXdpi);
return resources;
}
/**
* @param resources The resources.
* @return the resource
*/
public static Resources closeAdapt(Resources resources) {
DisplayMetrics dm = getDisplayMetrics(resources);
float newXdpi = dm.xdpi = dm.density * 72;
setAppDmXdpi(newXdpi);
return resources;
}
/**
* Value of pt to value of px.
*
* @param ptValue The value of pt.
* @return value of px
*/
public static int pt2Px(float ptValue) {
DisplayMetrics metrics = BaseApplication.getInstance().getResources().getDisplayMetrics();
return (int) (ptValue * metrics.xdpi / 72f + 0.5);
}
/**
* Value of px to value of pt.
*
* @param pxValue The value of px.
* @return value of pt
*/
public static int px2Pt(float pxValue) {
DisplayMetrics metrics = BaseApplication.getInstance().getResources().getDisplayMetrics();
return (int) (pxValue * 72 / metrics.xdpi + 0.5);
}
private static void setAppDmXdpi(final float xdpi) {
BaseApplication.getInstance().getResources().getDisplayMetrics().xdpi = xdpi;
}
private static DisplayMetrics getDisplayMetrics(Resources resources) {
DisplayMetrics miuiDisplayMetrics = getMiuiTmpMetrics(resources);
if (miuiDisplayMetrics == null) {
return resources.getDisplayMetrics();
}
return miuiDisplayMetrics;
}
private static DisplayMetrics getMiuiTmpMetrics(Resources resources) {
if (!isInitMiui) {
DisplayMetrics ret = null;
String simpleName = resources.getClass().getSimpleName();
if ("MiuiResources".equals(simpleName) || "XResources".equals(simpleName)) {
try {
//noinspection JavaReflectionMemberAccess
mTmpMetricsField = Resources.class.getDeclaredField("mTmpMetrics");
mTmpMetricsField.setAccessible(true);
ret = (DisplayMetrics) mTmpMetricsField.get(resources);
} catch (Exception e) {
Log.e("AdaptScreenUtils", "no field of mTmpMetrics in resources.");
}
}
isInitMiui = true;
return ret;
}
if (mTmpMetricsField == null) {
return null;
}
try {
return (DisplayMetrics) mTmpMetricsField.get(resources);
} catch (Exception e) {
return null;
}
}
/**
* 添加播放的音频id
*/
public static void addMusicIdOld(String musicId){
if (TextUtils.isEmpty(SpUtils.getUserMusicOldId())){
SpUtils.saveUserMusicOldId(musicId);
}else {
if (!SpUtils.getUserMusicOldId().contains(musicId)){
String musicid = SpUtils.getUserMusicOldId();
SpUtils.saveUserMusicOldId(musicid+","+musicId);
}
}
}
}