美文网首页
软键盘显示和隐藏的工具类

软键盘显示和隐藏的工具类

作者: 程序猿峰岑 | 来源:发表于2018-11-26 14:53 被阅读0次

    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.inputmethod.InputMethodManager;

    public class SoftKeyboardUtils {

    /**

    * 隐藏或显示软键盘

    * 如果现在是显示调用后则隐藏 反之则显示

        * @param activity

        */

        public static void showORhideSoftKeyboard(Activity activity){

    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

            imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

        }

    /**

    * 强制显示软键盘

        * @param activity

        */

        public static void showSoftKeyboard(Activity activity){

    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

            imm.showSoftInput(activity.getWindow().getDecorView(),InputMethodManager.SHOW_FORCED);

        }

    /**

    * 强制隐藏软键盘

        * @param activity

        */

        public static void hideSoftKeyboard(Activity activity){

    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

            imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); //强制隐藏键盘

        }

    /**

    * 调用系统方法 强制隐藏软键盘

        * @param activity

        */

        public static void hideSystemSoftKeyboard(Activity activity){

    ((InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

        }

    /**

    * 判断软键盘是否显示方法

        * @param activity

        * @return

        */

        public static boolean isSoftShowing(Activity activity) {

    //获取当屏幕内容的高度

            int screenHeight = activity.getWindow().getDecorView().getHeight();

            //获取View可见区域的bottom

            Rect rect =new Rect();

            //DecorView即为activity的顶级view

            activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);

            //考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度)

    //选取screenHeight*2/3进行判断

            return screenHeight*2/3 > rect.bottom+getSoftButtonsBarHeight(activity);

        }

    /**

    * 底部虚拟按键栏的高度

        * @return

        */

        @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;

            }

    }

    }

    相关文章

      网友评论

          本文标题:软键盘显示和隐藏的工具类

          本文链接:https://www.haomeiwen.com/subject/wtsbqqtx.html