Skip to content

Commit e6ad00b

Browse files
committed
see 12/19 log
1 parent 07ad520 commit e6ad00b

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,23 @@
22

33
import android.content.res.Resources;
44
import android.util.DisplayMetrics;
5+
import android.util.Log;
6+
7+
import java.lang.reflect.Field;
58

69

710
public final class AdaptScreenUtils {
811

12+
private static boolean firstFlag = true;
13+
private static Field mTmpMetrics;
14+
915
private static DisplayMetrics appDm;
1016

1117
/**
1218
* Adapt for the horizontal screen, and call it in [android.app.Activity.getResources].
1319
*/
1420
public static Resources adaptWidth(Resources resources, int designWidth) {
15-
DisplayMetrics dm = resources.getDisplayMetrics();
21+
DisplayMetrics dm = getDisplayMetrics(resources);
1622
float newXdpi = dm.xdpi = (dm.widthPixels * 72f) / designWidth;
1723
setAppDmXdpi(newXdpi);
1824
return resources;
@@ -22,7 +28,7 @@ public static Resources adaptWidth(Resources resources, int designWidth) {
2228
* Adapt for the vertical screen, and call it in [android.app.Activity.getResources].
2329
*/
2430
public static Resources adaptHeight(Resources resources, int designHeight) {
25-
DisplayMetrics dm = resources.getDisplayMetrics();
31+
DisplayMetrics dm = getDisplayMetrics(resources);
2632
float newXdpi = dm.xdpi = (dm.heightPixels * 72f) / designHeight;
2733
setAppDmXdpi(newXdpi);
2834
return resources;
@@ -33,7 +39,7 @@ public static Resources adaptHeight(Resources resources, int designHeight) {
3339
* @return the resource
3440
*/
3541
public static Resources closeAdapt(Resources resources) {
36-
DisplayMetrics dm = resources.getDisplayMetrics();
42+
DisplayMetrics dm = getDisplayMetrics(resources);
3743
float newXdpi = dm.xdpi = dm.density * 72;
3844
setAppDmXdpi(newXdpi);
3945
return resources;
@@ -67,4 +73,34 @@ private static void setAppDmXdpi(final float xdpi) {
6773
}
6874
appDm.xdpi = xdpi;
6975
}
76+
77+
private static DisplayMetrics getDisplayMetrics(Resources resources) {
78+
DisplayMetrics miuiDisplayMetrics = getMiuiTmpMetrics(resources);
79+
if (miuiDisplayMetrics == null) return resources.getDisplayMetrics();
80+
return miuiDisplayMetrics;
81+
}
82+
83+
private static DisplayMetrics getMiuiTmpMetrics(Resources resources) {
84+
if (firstFlag) {
85+
DisplayMetrics ret = null;
86+
String simpleName = resources.getClass().getSimpleName();
87+
if ("MiuiResources".equals(simpleName) || "XResources".equals(simpleName)) {
88+
try {
89+
mTmpMetrics = Resources.class.getDeclaredField("mTmpMetrics");
90+
mTmpMetrics.setAccessible(true);
91+
ret = (DisplayMetrics) mTmpMetrics.get(resources);
92+
} catch (Exception e) {
93+
Log.e("AdaptScreenUtils", "no field of mTmpMetrics in resources.");
94+
}
95+
}
96+
firstFlag = false;
97+
return ret;
98+
}
99+
if (mTmpMetrics == null) return null;
100+
try {
101+
return (DisplayMetrics) mTmpMetrics.get(resources);
102+
} catch (Exception e) {
103+
return null;
104+
}
105+
}
70106
}

0 commit comments

Comments
 (0)