關於輸入法的彈出和隱藏

最近作項目碰到一個比較難解決的問題,就是tabhost中輸入法老是會不按道理的出現或者隱藏起來單擊出不來。目前已經解決了這個問題,總結一下。   android

  首先,TabHost中輸入法跟通常單個頁面中的輸入法彈出和隱藏是有區別的。在切換的時候有時候輸入法會顯示出來,這是咱們不但願看到的。因此能夠給tabHost添加一個setOnTabChangedListener監聽器。而後再處理事件中經過 ide

  InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
  imm.hideSoftInputFromWindow(myTabhost.getApplicationWindowToken(), 0); 函數

來隱藏輸入法。 事件

  其次,在切換中有時會遇到一個問題就是點擊EditText控件輸入法不彈出,點擊其餘控件再點擊EditText後輸入法纔會出現。出現這種問題的多是焦點的問題,解決辦法是爲EditText添加setOnFocusChangeListener,在這個處理事件中經過判斷是否得到了焦點來處理各自的時間。 get

  public void onFocusChange(View v, boolean hasFocus) it

   {
    InputMethodManager imm = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
    if(hasFocus == true)
    { io

      imm.showSoftInput(edt, InputMethodManager.SHOW_FORCED);
    }
    else List

     {
      imm.hideSoftInputFromWindow(edt.getWindowToken(), 0);
    }
  } request

  若是是單個界面,上面有EditText和其餘控件,按照網上說法,應該是程序一啓動EditText會自動獲取焦點而後彈出輸入法,但是我在模擬器和真機上都沒出現過這種狀況,而後按照網上的說法,讓EditText獲得焦點就能夠了,但是添加了requestFocus後仍是不能成功,設置android:focusable="true"也不行,後來在Activity的onCreate函數中添加 程序

Timer timer = new Timer();
timer.schedule(new TimerTask(){

@Override
public void run() {
InputMethodManager m = (InputMethodManager)
edt.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}

}, 1000);
}

後,在加載頁面後輸入法會彈出。

相關文章
相關標籤/搜索