In development, sometimes when you exit the interface, if the keyboard pops up, you need to close the keyboard first, and then exit the Activity, how can you change the operation? Please see the following ways?
if (inputMethodManager.isActive(editText)) { Toast.makeText(MainActivity.this, "display", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "No show", Toast.LENGTH_SHORT).show(); }
The disadvantage of this method is that as long as editText has focus, it is always true, but it is not that editText will pop up when it gets focus. No egg.
Because Google doesn't provide the relevant method to judge whether the soft keyboard pops up, it can only be solved by calculating the layout height:
private boolean isSoftShowing() { // Get the height of the current screen content int screenHeight = getWindow().getDecorView().getHeight(); // Get the bottom of the View visible area Rect rect = new Rect(); // DecorView is the top view of activity getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); // Consider the case of virtual navigation bar (in the case of virtual navigation bar: screenHeight = rect.bottom + virtual navigation bar height) // Select screen height * 2 / 3 for judgment return screenHeight*2/3 > rect.bottom; }
A clever way is to select 2 / 3 of the screen height to judge. If you think this is not reliable, you can also get the height of the virtual navigation bar to judge accordingly.
Attach how to get the navigation bar:
/** * Height of the bottom virtual key bar * @return */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private int getSoftButtonsBarHeight() { DisplayMetrics metrics = new DisplayMetrics(); // This method may not get the height of the real screen mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics); int usableHeight = metrics.heightPixels; // Get the real height of the current screen mActivity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); int realHeight = metrics.heightPixels; if (realHeight > usableHeight) { return realHeight - usableHeight; } else { return 0; } }