當EditText
處於焦點狀態時(若是設備沒有物理鍵盤),我想自動顯示軟鍵盤,而且有兩個問題: android
當顯示個人Activity
,個人EditText
處於焦點狀態,但未顯示鍵盤,我須要再次單擊它以顯示鍵盤(顯示個人Activity
時,它應該顯示)。 ide
當我在鍵盤上單擊「完成」時,鍵盤被關閉,但EditText
保持焦點,而且您不想要(由於個人編輯已完成)。 post
要恢復,個人問題是在iPhone上有更多相似的東西:它使鍵盤與個人EditText
狀態保持同步(已聚焦/未聚焦),而且若是有物理鍵盤,固然也不會顯示軟鍵盤。 this
要使鍵盤出現,請使用 spa
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
與直接調用InputMethodManager相比,此方法更可靠。 code
要關閉它,請使用 rem
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
如下代碼摘自Google 4.1的SearchView源代碼。 彷佛能夠正常使用,在較小版本的Android上也能夠。 get
private Runnable mShowImeRunnable = new Runnable() { public void run() { InputMethodManager imm = (InputMethodManager) getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(editText, 0); } } }; private void setImeVisibility(final boolean visible) { if (visible) { post(mShowImeRunnable); } else { removeCallbacks(mShowImeRunnable); InputMethodManager imm = (InputMethodManager) getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(getWindowToken(), 0); } } }
而後,此外,在建立控件/活動時,須要添加如下代碼。 (在個人狀況下,它是一個複合控件,而不是活動)。 同步
this.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { setImeVisibility(hasFocus); } });
清單文件中的android:windowSoftInputMode="stateAlwaysVisible"
->。 it
edittext.requestFocus();
->在代碼中。
這將打開軟鍵盤,隨着活動的出現,編輯文本將在該軟鍵盤上請求焦點。
只需在清單文件中添加android:windowSoftInputMode =「 stateHidden」 ...
我在各類不一樣狀況下都遇到了相同的問題,在某些狀況下我發現瞭解決方案,但在另外一些狀況下卻不起做用,所以,這裏的組合解決方案在我發現的大多數狀況下均可以工做:
public static void showVirtualKeyboard(Context context, final View view) { if (context != null) { final InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); view.clearFocus(); if(view.isShown()) { imm.showSoftInput(view, 0); view.requestFocus(); } else { view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { view.post(new Runnable() { @Override public void run() { view.requestFocus(); imm.showSoftInput(view, 0); } }); view.removeOnAttachStateChangeListener(this); } @Override public void onViewDetachedFromWindow(View v) { view.removeOnAttachStateChangeListener(this); } }); } } }