一,.軟鍵盤隱藏與顯示幾種方式
軟鍵盤的的使用在實際開發中非常的常用,我就是講講自己在實際開發中遇到的坑與總結.
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);
最後總結:希望此篇文章對你有所幫助,下次有時間完善軟鍵盤彈出遮擋佈局的問題.