当edittext被关注时,键盘
我想在EditText
聚焦时自动显示软键盘(如果设备没有物理键盘),我有两个问题:
当我的Activity
显示时,我的EditText
被关注,但键盘没有显示,我需要再次点击才能显示键盘(当我的Activity
显示时它应该显示)。
当我点击键盘上的键盘时,键盘会消失,但EditText
保持聚焦状态,并且不想(因为我的编辑完成了)。
要恢复,我的问题是在iPhone上有更多的东西:它使键盘与我的EditText
状态保持同步(聚焦/不聚焦),当然如果有物理键盘则不会显示软键盘。
要强制显示软键盘,可以使用
EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
而为了消除EditText
的焦点,可悲的是你需要有一个虚拟View
来抓住焦点。
我希望这有帮助
要关闭它,你可以使用
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
我有同样的问题。 在editText VISIBILITY从GONE改变为VISIBLE之后,我不得不设置焦点并显示软键盘。 我使用下面的代码实现了这一点:
new Handler().postDelayed(new Runnable() {
public void run() {
// ((EditText) findViewById(R.id.et_find)).requestFocus();
//
EditText yourEditText= (EditText) findViewById(R.id.et_find);
// InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
// imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}
}, 200);
它适用于我100ms的延迟,但没有任何延迟或仅延迟1ms失败。
部分代码的评论显示了另一种方法,该方法仅适用于某些设备。 我在OS 2.2(仿真器),2.2.1(真实设备)和1.6(仿真器)上测试过。
这种方法为我节省了很多痛苦。
要使键盘出现,请使用
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
该方法比直接调用InputMethodManager更可靠。
要关闭它,请使用
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
链接地址: http://www.djcxy.com/p/16671.html
上一篇: keyboard when edittext is focused
下一篇: Disabling the fullscreen editing view for soft keyboard input in landscape?