問題:一個頁面(附有截圖)中含有搜索框和地圖,當程序跳轉到此頁面的時候,進行自動定位並且顯示一些指定的信息,但是此時去點擊輸入框,鍵盤不會調起。一直沒找到原因,可能是當跳轉到本頁面的時候焦點不能被輸入框獲得,但是設置的監聽又能夠執行,想不明白。
嘗試解決方案,監聽輸入框,人爲調起鍵盤,方案一:封裝方法
KeyBoardUtil.showKeyBoard(Activity);
/**
* 顯示鍵盤
* @param activity
*/
public static void showKeyBoard(Activity activity) {
try {
InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
View view = activity.getCurrentFocus();
if (view != null) {
imm.showSoftInputFromInputMethod(view.getWindowToken(), 0);
imm.toggleSoftInputFromWindow(view.getWindowToken(), 0, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
} catch (Exception e) {
}
}
這個方法只能在第一次進入該界面的時候鍵盤調起,當跳轉到別的界面再回來的時候鍵盤又不能夠正常調起。
修改方案監聽程序裏直接使用如下方法:
InputMethodManager imm = (InputMethodManager)NearVenueActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
這次是每次都能調起,但是出現鍵盤閃爍的情況,原因可能是鍵盤被重複調起,系統調起一次認爲又調起一次。
最後找到解決方案:
/**
* 解決鍵盤不能調起的問題
*/
etSearchVenue.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
WindowManager.LayoutParams params = getWindow().getAttributes();
if (event.getAction() == MotionEvent.ACTION_UP &&
params.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) {
InputMethodManager imm = (InputMethodManager)NearVenueActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
return true;
}
});
成功搞定這種情況下的鍵盤不能調起的問題,但是原因不明