1

当我按下 'Return' 键时EditText,它会通过变大来制作新行。EditText按下“返回”键时如何失去焦点?换句话说,当按下'Return'时如何让键盘消失?

4

3 回答 3

5

使用以下短代码获取返回事件并消失键盘。

(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);
}
于 2013-08-12T14:05:09.090 回答
3

如果您不希望用户按下它,请避免显示返回键。

您可以做的是,制作 EditText singleLine 并使用 android:nextFocus* 进行一些操作,以实现对用户更友好的 IME 导航。对于您的问题,您可以简单地从 xml 修改您的 EditText,例如

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edit"
        android:singleLine="true"
/>
于 2013-08-12T14:06:35.473 回答
0

您需要使用 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;
        }
    }
});
于 2013-08-12T14:17:22.897 回答