版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lin_dianwei/article/details/82806575
Android如何准确获取屏幕宽高、密度。
需要注意在不同版本有点区别,4.2增加虚拟导航栏,导致旧的方法获取的屏幕高度不包括导航栏。所以需要区分版本去获取。
顺便提下,
这货WindowManager windowManager = activity.getWindowManager()
跟这货WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
进去看下源码就知道,其实是一样的。只不过在Activity下才有这方法getWindowManager。
package com.dway.common.utils;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
/**
* 获取屏幕的宽高像素和密度等工具类
*/
public class DisplayUtil {
private static final String TAG = "DisplayUtil";
public static DisplayMetrics getDisplayMetrics(Activity activity){
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
//4.2开始有虚拟导航栏,增加了该方法才能准确获取屏幕高度
activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
}else{
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
//displayMetrics = activity.getResources().getDisplayMetrics();//或者该方法也行
}
return displayMetrics;
}
public static DisplayMetrics getDisplayMetrics(Context context){
WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
}else{
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
}
return displayMetrics;
}
public static void printDisplayMetrics(Activity activity){
DisplayMetrics displayMetrics = getDisplayMetrics(activity);
Log.v(TAG,"---printDisplayMetrics---" +
"widthPixels=" + displayMetrics.widthPixels
+ ", heightPixels=" + displayMetrics.heightPixels
+ ", density=" + displayMetrics.density
+ ", densityDpi="+displayMetrics.densityDpi);
}
public static void printDisplayMetrics(Context context){
DisplayMetrics displayMetrics = getDisplayMetrics(context);
Log.v(TAG,"---printDisplayMetrics---" +
"widthPixels=" + displayMetrics.widthPixels
+ ", heightPixels=" + displayMetrics.heightPixels
+ ", density=" + displayMetrics.density
+ ", densityDpi="+displayMetrics.densityDpi);
}
}