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

2018-11-26  本文已影响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;

        }

}

}

上一篇下一篇

猜你喜欢

热点阅读