Skip to content

Commit 6a28212

Browse files
committed
Improve AutoSize#getMetricsOnMiui
1 parent 365ed05 commit 6a28212

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

autosize/src/main/java/me/jessyan/autosize/AutoSize.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import android.util.DisplayMetrics;
2525
import android.view.View;
2626

27-
import java.lang.reflect.Field;
2827
import java.util.Locale;
2928
import java.util.Map;
3029
import java.util.concurrent.ConcurrentHashMap;
@@ -300,11 +299,9 @@ private static void setDensity(DisplayMetrics displayMetrics, float density, int
300299
* @return {@link DisplayMetrics}, 可能为 {@code null}
301300
*/
302301
private static DisplayMetrics getMetricsOnMiui(Resources resources) {
303-
if ("MiuiResources".equals(resources.getClass().getSimpleName()) || "XResources".equals(resources.getClass().getSimpleName())) {
302+
if (AutoSizeConfig.getInstance().isMiui() && AutoSizeConfig.getInstance().getTmpMetricsField() != null) {
304303
try {
305-
Field field = Resources.class.getDeclaredField("mTmpMetrics");
306-
field.setAccessible(true);
307-
return (DisplayMetrics) field.get(resources);
304+
return (DisplayMetrics) AutoSizeConfig.getInstance().getTmpMetricsField().get(resources);
308305
} catch (Exception e) {
309306
return null;
310307
}

autosize/src/main/java/me/jessyan/autosize/AutoSizeCompat.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import android.content.res.Resources;
2020
import android.util.DisplayMetrics;
2121

22-
import java.lang.reflect.Field;
2322
import java.util.Locale;
2423
import java.util.Map;
2524
import java.util.concurrent.ConcurrentHashMap;
@@ -280,11 +279,9 @@ private static void setDensity(DisplayMetrics displayMetrics, float density, int
280279
* @return {@link DisplayMetrics}, 可能为 {@code null}
281280
*/
282281
private static DisplayMetrics getMetricsOnMiui(Resources resources) {
283-
if ("MiuiResources".equals(resources.getClass().getSimpleName()) || "XResources".equals(resources.getClass().getSimpleName())) {
282+
if (AutoSizeConfig.getInstance().isMiui() && AutoSizeConfig.getInstance().getTmpMetricsField() != null) {
284283
try {
285-
Field field = Resources.class.getDeclaredField("mTmpMetrics");
286-
field.setAccessible(true);
287-
return (DisplayMetrics) field.get(resources);
284+
return (DisplayMetrics) AutoSizeConfig.getInstance().getTmpMetricsField().get(resources);
288285
} catch (Exception e) {
289286
return null;
290287
}

autosize/src/main/java/me/jessyan/autosize/AutoSizeConfig.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import android.support.v4.app.Fragment;
2727
import android.util.DisplayMetrics;
2828

29+
import java.lang.reflect.Field;
30+
2931
import me.jessyan.autosize.external.ExternalAdaptManager;
3032
import me.jessyan.autosize.unit.UnitsManager;
3133
import me.jessyan.autosize.utils.LogUtils;
@@ -124,6 +126,14 @@ public final class AutoSizeConfig {
124126
* 如果为 {@code false}, 则会跟随系统设置中字体大小的改变, 默认为 {@code false}
125127
*/
126128
private boolean isExcludeFontScale;
129+
/**
130+
* 是否是 Miui 系统
131+
*/
132+
private boolean isMiui;
133+
/**
134+
* Miui系统中的 mTmpMetrics 字段
135+
*/
136+
private Field mTmpMetricsField;
127137
/**
128138
* 屏幕适配监听器,用于监听屏幕适配时的一些事件
129139
*/
@@ -219,6 +229,15 @@ public void onLowMemory() {
219229
LogUtils.d("initDensity = " + mInitDensity + ", initScaledDensity = " + mInitScaledDensity);
220230
mActivityLifecycleCallbacks = new ActivityLifecycleCallbacksImpl(strategy == null ? new WrapperAutoAdaptStrategy(new DefaultAutoAdaptStrategy()) : strategy);
221231
application.registerActivityLifecycleCallbacks(mActivityLifecycleCallbacks);
232+
if ("MiuiResources".equals(application.getResources().getClass().getSimpleName()) || "XResources".equals(application.getResources().getClass().getSimpleName())) {
233+
isMiui = true;
234+
try {
235+
mTmpMetricsField = Resources.class.getDeclaredField("mTmpMetrics");
236+
mTmpMetricsField.setAccessible(true);
237+
} catch (Exception e) {
238+
mTmpMetricsField = null;
239+
}
240+
}
222241
return this;
223242
}
224243

@@ -462,6 +481,24 @@ public boolean isVertical() {
462481
return isVertical;
463482
}
464483

484+
/**
485+
* 返回 {@link #isMiui}
486+
*
487+
* @return {@link #isMiui}
488+
*/
489+
public boolean isMiui() {
490+
return isMiui;
491+
}
492+
493+
/**
494+
* 返回 {@link #mTmpMetricsField}
495+
*
496+
* @return {@link #mTmpMetricsField}
497+
*/
498+
public Field getTmpMetricsField() {
499+
return mTmpMetricsField;
500+
}
501+
465502
/**
466503
* 设置屏幕方向
467504
*

0 commit comments

Comments
 (0)