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);    }}

 

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  5. Android屏幕旋转时Activity不重新调用onCreate的方法
  6. Android禁止EditText自动弹出软键盘的方法
  7. Android多线程
  8. Android(安卓)时间获取总结
  9. Android四大核心——Activity

随机推荐

  1. Android(安卓)监听 home键和菜单键
  2. 【Android】在任何View上添加红点★★★
  3. Android(安卓)动态切换底部tab按钮
  4. Android(安卓)7.0 app代码修改抓包
  5. 视频聊天系统源码Android(安卓)播放视频
  6. Android电池管理
  7. Android(安卓)2.2.2到Android(安卓)4.2.2
  8. Android笔记
  9. Android(安卓)监听 home键和菜单键
  10. Apktool 回编译出现No resource identifi