内容简介:最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码:获取软键盘高度键盘的打开与关闭操作:
最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码:
获取软键盘高度
//一个静态变量存储高度 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知识及分享个人爱好文章:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Swift关闭UITextView键盘
- c# – Windows 8 – 如何关闭触摸键盘?
- ios 最新系统bug与解决——微信公众号中弹出键盘再收起时,原虚拟键盘位点击
- iOS键盘动画细节
- ios 最新系统bug与解决——微信公众号中弹出键盘再收起时,原虚拟键盘位点击事件无效
- Swift自定义表情键盘+录音
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。