問題:一個頁面(附有)中含有搜尋方塊和地圖,當程式跳轉到此頁面的時候,進行自動定位並且顯示一些指定的資訊,但是此時去點擊輸入框,鍵盤不會調起。一直沒找到原因,可能是當跳轉到本頁面的時候焦點不能被輸入框獲得,但是設定的監聽又能夠執行,想不明白。
嘗試解決方案,監聽輸入框,人為調起鍵盤,方案一:封裝方法
[java]
KeyBoardUtil.showKeyBoard(Activity);
[java] view plaincopy
/**
* 顯示鍵盤
* @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) {
}
}
這個方法只能在第一次進入該介面的時候鍵盤調起,當跳轉到別的介面再回來的時候鍵盤又不能夠正常調起。
修改方案監聽程式裡直接使用如下方法:
[java]
InputMethodManager imm = (InputMethodManager)NearVenueActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
這次是每次都能調起,但是出現鍵盤閃爍的情況,原因可能是鍵盤被重複調起,系統調起一次認為又調起一次。
最後找到解決方案:
[java]
/**
* 解決鍵盤不能調起的問題
*/
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;
}
});
成功搞定這種情況下的鍵盤不能調起的問題,但是原因不明