package com.zhangteng.myapplication;import android.app.Activity;import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.Point;import android.graphics.Rect;import android.os.Build;import android.util.DisplayMetrics;import android.view.Display;import android.view.KeyCharacterMap;import android.view.KeyEvent;import android.view.ViewConfiguration;import android.view.Window;import android.view.WindowManager;/** * Created by Lanxumit on 2017/9/25. */public class SystemUtil {    /**     * 可以在NavigationBar的屏幕上准确的计算到屏幕的宽高     */    public static int getRealWidth(Context context) {        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        Display display = wm.getDefaultDisplay();        int screenWidth = 0;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            DisplayMetrics dm = new DisplayMetrics();            display.getRealMetrics(dm);            screenWidth = dm.widthPixels;            //或者也可以使用getRealSize方法//            Point size = new Point();//            display.getRealSize(size);//            screenWidth = size.x;        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {            try {                screenWidth = (Integer) Display.class.getMethod("getRawWidth").invoke(display);            } catch (Exception e) {                DisplayMetrics dm = new DisplayMetrics();                display.getMetrics(dm);                screenWidth = dm.widthPixels;            }        }        return screenWidth;    }    public static int getRealHeight(Context context) {        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        Display display = wm.getDefaultDisplay();        int screenHeight = 0;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            DisplayMetrics dm = new DisplayMetrics();            display.getRealMetrics(dm);            screenHeight = dm.heightPixels;            //或者也可以使用getRealSize方法//            Point size = new Point();//            display.getRealSize(size);//            screenHeight = size.y;        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {            try {                screenHeight = (Integer) Display.class.getMethod("getRawHeight").invoke(display);            } catch (Exception e) {                DisplayMetrics dm = new DisplayMetrics();                display.getMetrics(dm);                screenHeight = dm.heightPixels;            }        }        return screenHeight;    }    /**     * 其高度可以通过读取定义在Android系统尺寸资源中的status_bar_height获得,所以不管当前Activity有没有隐藏StatusBar,获得的结果都是一样的。     * @param context     * @return     */    public static int getStatusBarHeight(Context context) {        int statusBarHeight = -1;        Resources resources = context.getResources();        int resourceId = resources.getIdentifier("status_bar_height", "dimen","android");        if (resourceId > 0) {            statusBarHeight = resources.getDimensionPixelSize(resourceId);        }        return statusBarHeight;    }    /**     * 虚拟按键(NavigationBar)是部分Android手机屏幕底部用以取代物理按键的区域,可隐藏。其高度可以通过读取定义在Android系统尺寸资源中的navigation_bar_height获得,所以不管当前Activity有没有隐藏NavigationBar,获得的结果都是一样的。     * @param context     * @return     */    public static int getNavigationBarHeight(Context context) {        int navigationBarHeight = -1;        Resources resources = context.getResources();        int resourceId = resources.getIdentifier("navigation_bar_height","dimen", "android");        if (resourceId > 0) {            navigationBarHeight = resources.getDimensionPixelSize(resourceId);        }        return navigationBarHeight;    }    /**     * 判断NavigationBar是否显示     * @param context     * @return     */    public static boolean isNavigationBarShow(Context context) {        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            Display display = wm.getDefaultDisplay();            Point size = new Point();            Point realSize = new Point();            display.getSize(size);            display.getRealSize(realSize);            return realSize.y != size.y;        } else {            boolean menu = ViewConfiguration.get(context).hasPermanentMenuKey();            boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);            if (menu || back) {                return false;            } else {                return true;            }        }    }    /**     * ActionBar就是在带有ActionBar的Theme中StatusBar下方、Activity顶部的类似于标题栏的区域。其高度可以通过读取定义在Android系统属性资源中的actionBarSize获得,所以不管当前Activity有没有使用ActionBar,获得的结果都是一样的。     * @param context     * @return     */    public static float getActoinBarHeight(Context context) {        TypedArray actionbarSizeTypedArray = context.obtainStyledAttributes(new int[] {                android.R.attr.actionBarSize        });        return actionbarSizeTypedArray.getDimension(0, 0);    }    /**     * ContentView就是我们为Activity设计的layout布局然后通过setContentView添加到Window上的那个View了。该方法推荐在onWindowFocusChanged()中执行,在onCreate()等方法中执行会返回0。     * @param activity     * @return     */    public static int getContentViewHeight(Activity activity) {        Rect rectangle= new Rect();        activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(rectangle);        return rectangle.height();    }    /**     * 程序能显示(或者说可见)的区域。返回结果受StatusBar、NavigationBar和软键盘等显示/消失的状态影响。当Activity隐藏了StatusBar、NavigationBar和软键盘处于全屏状态时,这个区域的大小就是屏幕的大小,即使Activity的Theme是Theme.Dialog之类。该方法推荐在onWindowFocusChanged()中执行,在onCreate()等方法中执行会返回0。     * @param activity     * @return     */    public static int getWindowVisibleDisplayHeight(Activity activity) {        Rect rectangle= new Rect();        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);        return rectangle.height();    }}

更多相关文章

  1. Android拍照,读取相册
  2. ExpandableListView 使用方法
  3. android三种监听方法
  4. android 编译错误解决方法(一)
  5. Android(安卓)基于surfaceView绘制正弦曲线
  6. Android一种欢迎界面全屏显示方法
  7. Android(安卓)滑动验证的一种简单实现
  8. MPAndroidChart的具体属性方法
  9. Android(安卓)切屏

随机推荐

  1. 是什么导致了Python分割错误?
  2. python 产生随机数,随机字符串
  3. Python3学习笔记之十九
  4. 如何正确地获取在pysnmp中被捕获的变量的
  5. Python on Raspbian - " TypeError: ' nu
  6. 不能使用python HTTPSConnection()连接到
  7. 利用uWSGI和Nginx部署Django
  8. Python内置函数之匿名(lambda)函数
  9. python——爬虫实战(一)
  10. Flask-RESTful与Flask-WTF形式集成