Android 軟鍵盤踩過的坑心得

  一,.軟鍵盤隱藏與顯示幾種方式

     軟鍵盤的的使用在實際開發中非常的常用,我就是講講自己在實際開發中遇到的坑與總結.

    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.隱藏軟鍵盤(可用於ActivityFragment)方法一
   
 */
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);  
最後總結:希望此篇文章對你有所幫助,下次有時間完善軟鍵盤彈出遮擋佈局的問題.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章