Android 如何正确的获取屏幕高度

来源:互联网 发布:wav音频分割软件 编辑:程序博客网 时间:2024/05/16 01:43

一、问题描述


目前很多手机主流手机将Back键、Home键、Menu键设计成虚拟功能键。当我们获取屏幕高度时就会遇到问题,获取到的并不是实际的高度,从而不能正确的布局。


下边通过俩种方式获取:
1.通过判断(Build.VERSION.SDK_INT >= 17)使用方法getRealMetrics()获取。
2.通过反射调用getRealMetrics获取。


二、正确方法

// 方法一public void initScreenInfo(Context context) {    try {        DisplayMetrics dm = new DisplayMetrics();        // 测试设备 1440*2960 --- SDK VERSION 24 --- 包含虚拟功能键        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {            ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRealMetrics(dm); // 包含虚拟功能键高度 dm.heightPixels = 2960        } else {            ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); // 不包含虚拟功能键高度 dm.heightPixels = 2768        }        int WIDTH = Math.min(dm.widthPixels, dm.heightPixels);        int HEIGHT = Math.max(dm.widthPixels, dm.heightPixels);        float DENSITY = dm.density;        int DENSITY_DPI = dm.densityDpi;        float SCALED_DENSITY = dm.scaledDensity;        tv.setText("   WIDTH:" + WIDTH + "   HEIGHT:" + HEIGHT + "   DENSITY:" + DENSITY + "   DENSITY_DPI:" + DENSITY_DPI + "   SCALED_DENSITY:" + SCALED_DENSITY);    } catch (Exception e) {        e.printStackTrace();    }}// 方法二private void initScreenInfo() {    Display display = getWindowManager().getDefaultDisplay();    DisplayMetrics dm = new DisplayMetrics();    Class c;    try {        c = Class.forName("android.view.Display");        Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);        method.invoke(display, dm);        int HEIGHT = dm.heightPixels;        int WIDTH = dm.widthPixels;        tv2.setText("   WIDTH:" + WIDTH + "   HEIGHT:" + HEIGHT);    } catch (Exception e) {        e.printStackTrace();    }}