Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态

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

获取软键盘高度

    //一个静态变量存储高度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() {@Overridepublic 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() {@Overridepublic 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;
}

小编整理了一份Android电子书籍,需要的童鞋关注底部公众号(longxuanzhigu)回复:“e_books” 即可获取哦!
在这里插入图片描述

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

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部