package com.basic.security.utils; import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; import android.graphics.Rect; import android.os.Build; import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import com.basic.security.base.BaseApplication; public class KeyboardUtil { public static void setupUI(View view) { if (!(view instanceof EditText)) { view.setOnTouchListener((v, event) -> { KeyboardUtil.hideSoftKeyboard(); return false; }); } if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { View innerView = ((ViewGroup) view).getChildAt(i); setupUI(innerView); } } } public static void hideSoftKeyboard() { Activity activity = BaseApplication.getApplication().activity; InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService( Activity.INPUT_METHOD_SERVICE); View view = activity.getCurrentFocus(); if (view != null) { inputMethodManager.hideSoftInputFromWindow( view.getWindowToken(), 0); } } public static void showKeyboard() { InputMethodManager imm = (InputMethodManager) BaseApplication.getApplication().activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); } public static boolean isSoftShowing(Activity activity) { int screenHeight = activity.getWindow().getDecorView().getHeight(); Rect rect = new Rect(); activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); return screenHeight * 2 / 3 > rect.bottom + getSoftButtonsBarHeight(activity); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) private static int getSoftButtonsBarHeight(Activity activity) { DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); int usableHeight = metrics.heightPixels; activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); int realHeight = metrics.heightPixels; if (realHeight > usableHeight) { return realHeight - usableHeight; } else { return 0; } } }