2
2
3
3
import android .app .Activity ;
4
4
import android .app .KeyguardManager ;
5
+ import android .content .ComponentCallbacks ;
5
6
import android .content .Context ;
6
7
import android .content .pm .ActivityInfo ;
7
8
import android .content .res .Configuration ;
13
14
import android .support .annotation .NonNull ;
14
15
import android .support .annotation .RequiresPermission ;
15
16
import android .util .DisplayMetrics ;
17
+ import android .util .Log ;
16
18
import android .view .Surface ;
17
19
import android .view .View ;
18
20
import android .view .Window ;
@@ -303,7 +305,7 @@ public static boolean isTablet() {
303
305
* the designWidthInDp = 720 / 2.
304
306
*/
305
307
public static void adaptScreen4VerticalSlide (final Activity activity ,
306
- final int designWidthInDp ) {
308
+ final float designWidthInDp ) {
307
309
adaptScreen (activity , designWidthInDp , true );
308
310
}
309
311
@@ -315,7 +317,7 @@ public static void adaptScreen4VerticalSlide(final Activity activity,
315
317
* the designHeightInDp = 1080 / 3.
316
318
*/
317
319
public static void adaptScreen4HorizontalSlide (final Activity activity ,
318
- final int designHeightInDp ) {
320
+ final float designHeightInDp ) {
319
321
adaptScreen (activity , designHeightInDp , false );
320
322
}
321
323
@@ -325,27 +327,55 @@ public static void adaptScreen4HorizontalSlide(final Activity activity,
325
327
* @param activity The activity.
326
328
*/
327
329
public static void cancelAdaptScreen (final Activity activity ) {
328
- final DisplayMetrics appDm = Utils .getApp ().getResources ().getDisplayMetrics ();
329
330
final DisplayMetrics activityDm = activity .getResources ().getDisplayMetrics ();
330
- activityDm .density = appDm .density ;
331
- activityDm .scaledDensity = appDm .scaledDensity ;
332
- activityDm .densityDpi = appDm .densityDpi ;
331
+ if (UDM .densityDpi != -1 ) {
332
+ activityDm .density = UDM .density ;
333
+ activityDm .scaledDensity = UDM .scaledDensity ;
334
+ activityDm .densityDpi = UDM .densityDpi ;
335
+ } else {
336
+ Log .i ("ScreenUtils" , "U should adapt screen first." );
337
+ }
333
338
}
334
339
340
+
335
341
/**
336
342
* Reference from: https://mp.weixin.qq.com/s/d9QCoBP6kV9VSWvVldVVwA
337
343
*/
338
344
private static void adaptScreen (final Activity activity ,
339
345
final float sizeInDp ,
340
346
final boolean isVerticalSlide ) {
341
- final DisplayMetrics appDm = Utils .getApp ().getResources ().getDisplayMetrics ();
342
347
final DisplayMetrics activityDm = activity .getResources ().getDisplayMetrics ();
348
+ if (UDM .densityDpi == -1 ) {
349
+ UDM .density = activityDm .density ;
350
+ UDM .scaledDensity = activityDm .scaledDensity ;
351
+ UDM .densityDpi = activityDm .densityDpi ;
352
+ Utils .getApp ().registerComponentCallbacks (new ComponentCallbacks () {
353
+ @ Override
354
+ public void onConfigurationChanged (Configuration newConfig ) {
355
+ if (newConfig != null && newConfig .fontScale > 0 ) {
356
+ UDM .scaledDensity =
357
+ Utils .getApp ().getResources ().getDisplayMetrics ().scaledDensity ;
358
+ }
359
+ }
360
+
361
+ @ Override
362
+ public void onLowMemory () {/**/ }
363
+ });
364
+ }
343
365
if (isVerticalSlide ) {
344
366
activityDm .density = activityDm .widthPixels / sizeInDp ;
345
367
} else {
346
368
activityDm .density = activityDm .heightPixels / sizeInDp ;
347
369
}
348
- activityDm .scaledDensity = activityDm .density * (appDm .scaledDensity / appDm .density );
370
+ activityDm .scaledDensity = activityDm .density * (UDM .scaledDensity / UDM .density );
349
371
activityDm .densityDpi = (int ) (160 * activityDm .density );
350
372
}
373
+
374
+ private static final UtilDisplayMetrics UDM = new UtilDisplayMetrics ();
375
+
376
+ private static class UtilDisplayMetrics {
377
+ float density ;
378
+ float scaledDensity ;
379
+ int densityDpi = -1 ;
380
+ }
351
381
}
0 commit comments