最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码:

获取软键盘高度

    //一个静态变量存储高度    public static int keyboardHeight = 0;    boolean isVisiableForLast = false;    ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = null;    public void addOnSoftKeyBoardVisibleListener() {        if (keyboardHeight > 0) {            return;        }        final View decorView = getWindow().getDecorView();        onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {            @Override            public void onGlobalLayout() {                Rect rect = new Rect();                decorView.getWindowVisibleDisplayFrame(rect);                //计算出可见屏幕的高度                int displayHight = rect.bottom - rect.top;                //获得屏幕整体的高度                int hight = decorView.getHeight();                boolean visible = (double) displayHight / hight < 0.8;                int statusBarHeight = 0;                try {                    Class<?> c = Class.forName("com.android.internal.R$dimen");                    Object obj = c.newInstance();                    Field field = c.getField("status_bar_height");                    int x = Integer.parseInt(field.get(obj).toString());                    statusBarHeight = getApplicationContext().getResources().getDimensionPixelSize(x);                } catch (Exception e) {                    e.printStackTrace();                }                if (visible && visible != isVisiableForLast) {                    //获得键盘高度                    keyboardHeight = hight - displayHight - statusBarHeight;                    Log.i("keyboardHeight==1213==", "" + keyboardHeight);                }                isVisiableForLast = visible;            }        };        decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);    }

键盘的打开与关闭操作:

public class KeybordS {    /**     * 打开软键盘     */    public static void openKeybord(EditText mEditText, Context mContext) {        mEditText.setFocusable(true);        mEditText.setFocusableInTouchMode(true);        mEditText.requestFocus();        InputMethodManager imm = (InputMethodManager) mContext                .getSystemService(Context.INPUT_METHOD_SERVICE);        imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,                InputMethodManager.HIDE_IMPLICIT_ONLY);    }    /**     * 关闭软键盘     */    public static void closeKeybord(EditText mEditText, Context mContext) {        InputMethodManager imm = (InputMethodManager) mContext                .getSystemService(Context.INPUT_METHOD_SERVICE);        imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);    }     /**     * 关闭软键盘     */     public static void hideInput(Activity activity) {        if (activity.getCurrentFocus() != null) {            InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE);            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);        }    }    /**     * 判断当前软键盘是否打开     */    public static boolean isSoftInputShow(Activity activity) {        // 虚拟键盘隐藏 判断view是否为空        View view = activity.getWindow().peekDecorView();        if (view != null) {            // 隐藏虚拟键盘            InputMethodManager inputmanger = (InputMethodManager) activity                    .getSystemService(Activity.INPUT_METHOD_SERVICE);//       inputmanger.hideSoftInputFromWindow(view.getWindowToken(),0);            return inputmanger.isActive() && activity.getWindow().getCurrentFocus() != null;        }        return false;    }}

监听键盘处于打开还是关闭状态:

private void setListenerToRootView() {    final View rootView = getWindow().getDecorView().findViewById(android.R.id.content);    rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {        @Override        public void onGlobalLayout() {            boolean mKeyboardUp = isKeyboardShown(rootView);            if (mKeyboardUp) {                //键盘弹出                //Toast.makeText(getApplicationContext(), "键盘弹出", Toast.LENGTH_SHORT).show();             } else {                //键盘收起                //Toast.makeText(getApplicationContext(), "键盘收起", Toast.LENGTH_SHORT).show();            }        }    });}private boolean isKeyboardShown(View rootView) {    final int softKeyboardHeight = 100;    Rect r = new Rect();    rootView.getWindowVisibleDisplayFrame(r);    DisplayMetrics dm = rootView.getResources().getDisplayMetrics();    int heightDiff = rootView.getBottom() - r.bottom;    return heightDiff > softKeyboardHeight * dm.density;}

以下是个人公众号(longxuanzhigu),之后发布的文章会同步到该公众号,方便交流学习Android知识及分享个人爱好文章: