android 获取屏幕的高度(软键盘的影响)

it2025-03-29  13

部分手机,尤其是华为手机,底部会出现一个软键盘,这个是是可以设置的,让其消失,以下以华为手机为例说明。通常我们获取屏幕的宽高有几种方法,通用的 有

    public static int getScreenHeight(Context context) {         DisplayMetrics dm = new DisplayMetrics();         WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);         wm.getDefaultDisplay().getMetrics(dm);         return dm.widthPixels;     }

结果,我是用了这个方法,却发现获取的高度与手机系统给出的高度不一样,有一点的差距,此时手机的软键盘是出于打开状态,如果把软键盘收起来,再调用这 个方法,两个数值就对上了。我就想,找下获取底部软键盘的高度的方法,如下

    public static int getBottomBarHeight(Context context) {         int resourceId = 0;         int rid = context.getResources().getIdentifier("config_showNavigationBar", "bool", "android");         if (rid != 0) {             resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android");             return context.getResources().getDimensionPixelSize(resourceId);         } else             return 0;     }

上面的方法就可以获取到软键盘的高度,如果软键盘没收起,我们想获取屏幕的高度,怎么办?google 实际上是提供了方法,只不过是在 4.4 新增的方法, 我们可以通过反射来获取试试

    public static int getContainVirtualKey(Context context) {         int dpi = 0;         WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);         Display display = wm.getDefaultDisplay();         DisplayMetrics dm = new DisplayMetrics();         @SuppressWarnings("rawtypes")         Class c;         try {             c = Class.forName("android.view.Display");             @SuppressWarnings("unchecked")             Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);             method.invoke(display, dm);             dpi = dm.heightPixels;         } catch (Exception e) {             e.printStackTrace();         }         return dpi;     }

既然我们知道了这个方法,那么可以通过版本的判断,直接调用,而非是使用反射,代码如下

    public static int getPreenHeight(Context context) {         WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);         DisplayMetrics dm = new DisplayMetrics();         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {             wm.getDefaultDisplay().getRealMetrics(dm);         } else {             wm.getDefaultDisplay().getMetrics(dm);         }         int height = dm.heightPixels;         return height;     }

可以通过以上的方法,来判断软键盘是否处于收起状态,如果想把软键盘收起来,继续上代码

    private void hideVirtualKeyBoard(){         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {             getWindow().getDecorView().setSystemUiVisibility(                     View.SYSTEM_UI_FLAG_LAYOUT_STABLE                             | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                             | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                             | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                             | View.SYSTEM_UI_FLAG_FULLSCREEN                             | View.SYSTEM_UI_FLAG_IMMERSIVE);//API19         } else {             getWindow().getDecorView().setSystemUiVisibility(                     View.SYSTEM_UI_FLAG_LAYOUT_STABLE                             | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION                             | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                             | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                             | View.SYSTEM_UI_FLAG_FULLSCREEN             );         }     }

 

最新回复(0)