当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); } }); } } }