【发布时间】:2013-08-13 20:38:59
【问题描述】:
当我在EditText 中按下“Return”键时,它会通过变大来创建新行。
按下“返回”键时如何使EditText失去焦点?换句话说,当按下'Return'时如何让键盘消失?
【问题讨论】:
标签: android android-edittext return lost-focus
当我在EditText 中按下“Return”键时,它会通过变大来创建新行。
按下“返回”键时如何使EditText失去焦点?换句话说,当按下'Return'时如何让键盘消失?
【问题讨论】:
标签: android android-edittext return lost-focus
使用以下短代码获取返回事件并消失键盘。
(EditText) findViewById(R.id.editText1)).setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == 66) {
hideKeyboard(v);
return true; //this is required to stop sending key event to parent
}
return false;
}
});
在上面的代码中66是Return的代码你也可以使用KeyEvent.KEYCODE_ENTER作为@JJPA的首选。
以下是显式隐藏键盘的代码。
private void hideKeyboard(View view) {
InputMethodManager manager = (InputMethodManager) view.getContext()
.getSystemService(INPUT_METHOD_SERVICE);
if (manager != null)
manager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
【讨论】:
return true; 编辑了我的答案(答案中的上半部分代码)。这将阻止新行。 :)
如果您不希望用户按下返回键,请避免显示它。
您可以做的是,制作 EditText 单行并使用 android:nextFocus* 进行一些操作,以实现对用户更友好的 IME 导航。对于您的问题,您可以简单地从 xml 修改您的 EditText,例如
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/edit"
android:singleLine="true"
/>
【讨论】:
您需要使用 TextWatcher 来捕捉 \n 字符并修改文本,这样就没有新行了,这就是神奇之处:
mFirstEditText.addTextChangedListener( new TextWatcher() {
private boolean mEnterOccurred;
@Override
public void onTextChanged(CharSequence text, int start, int before, int count) {
String textStr = text.toString();
if(textStr.contains("\n")) {
// Wipe off the \n
textStr = textStr.replace("\n", "");
mEnterOccurred = true;
mFirstEditText.setText(textStr);
}
}
@Override
public void beforeTextChanged(CharSequence text, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
if(mEnterOccurred) {
// Change focus to another EditText
mSecondEditText.requestFocus();
// Change flag to default
mEnterOccurred = false;
}
}
});
【讨论】: