一,.软键盘隐藏与显示几种方式
软键盘的的使用在实际开发中非常的常用,我就是讲讲自己在实际开发中遇到的坑与总结.
1.判断软键是否显示与隐藏,我们可以使用以下的方法,通过返回的boolean值来做出判断.这方法在实际的开发中,可以收到的对editText焦点的控制,当键盘显示的时候显示光标,否则
不显示editText的光标.
rootView 是布局文件的跟布局
/** * 判断软键盘显示或隐藏方法一 * @param rootView 布局的根view * @return */ public static boolean isKeyboardShown(View rootView) { Rect rect = new Rect(); rootView.getWindowVisibleDisplayFrame(rect); DisplayMetrics dm = rootView.getResources().getDisplayMetrics(); int heightDiff = rootView.getBottom() - rect.bottom; return heightDiff > 100 * dm.density; }
/** * 判断软键盘显示或隐藏方法二 */
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //isOpen若返回true,则表示输入法打开 boolean isOpen=imm.isActive();
2.手动的隐藏软键盘的方法,适用于任何场景
/** * 1.隐藏软键盘(可用于Activity,Fragment)方法一*/ public static void hideSoftKeyboard(Context context, List<View> viewList) { if (viewList == null) return; InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); for (View v : viewList) { inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } }/* * 2.隐藏软键盘方法二*/
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//这里的view可以EditText对象
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);看到上面的方法可能很多的小白懵逼了,很多时候我们手动要显示软键盘的时候,传入的参数不是带有集合的view的参数,这种方法实际使用的情况是当你弹出软键盘的操作在Adapter中时候,如何手动取消软键盘呢?解决方法就是在绑定数据,获取弹出软键盘控件的时候,将每个控件存入到集合中,当需要手动隐藏软键盘的时候,就可以遍历集合对每一个view进行隐藏软键盘的操作.3.手动显示软键盘的方法/** * 1.显示软键盘方法一 * @param view * @param context */ public void mShowSoftKeyboard(View view,Context context ) { if (view.requestFocus()) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT); }}/** * 2.显示软键盘方法二 */InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);
***最后一种直接了当的方法,一个方法解决隐藏和显示两个问题***
/** * 如果输入法在窗口上已经显示,则隐藏,反之则显示一个方法解决隐藏和显示的两个问题 */InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);最后总结:希望此篇文章对你有所帮助,下次有时间完善软键盘弹出遮挡布局的问题.