Скрыть мягкую клавиатуру при нажатии клавиши возврата

Я искал полдюжины других ответов на SO, но не нашел того, что работает. Все, что я пытаюсь сделать, это отключить мягкую клавиатуру, когда пользователь нажимает кнопку ввода. (Это эквивалент безумно легкого вызова iOS "resignKeyboard".) В следующем коде метод onEditorAction не вызывается. Я создал представление EditText в своем XML файле, а код в моем фрагменте выглядит следующим образом:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        fragView = inflater.inflate(R.layout.fragment_encrypt2, container, false);
        textField = (EditText) fragView.findViewById(R.id.textField);

        textField.setOnEditorActionListener(new TextView.OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView arg0, int actionId,
                                          KeyEvent arg2) {
                // hide the keyboard and search the web when the enter key
                // button is pressed
                if (actionId == EditorInfo.IME_ACTION_GO
                        || actionId == EditorInfo.IME_ACTION_DONE
                        || actionId == EditorInfo.IME_ACTION_NEXT
                        || actionId == EditorInfo.IME_ACTION_SEND
                        || actionId == EditorInfo.IME_ACTION_SEARCH
                        || (arg2.getAction() == KeyEvent.KEYCODE_ENTER)) {
                    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(textField.getWindowToken(), 0);

                    return true;
                }
                return false;
            }
        });

        // Inflate the layout for this fragment
        return fragView;//inflater.inflate(R.layout.fragment_encrypt2, container, false);
    }

Ниже приведен фрагмент из файла XML, где я определяю поле EditText. Мне нужно, чтобы EditText был многострочным.

<EditText
            android:id="@+id/textField"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:hint="@string/Encrypted_Text_Hint"
            android:gravity="top"
            android:inputType="textMultiLine"
            android:imeOptions="actionDone"/>
+21
30 окт. '14 в 4:43
источник поделиться
7 ответов

Если вам не нужна несколько строк, для вас edittext вы можете просто указать одну строку для edittext, а также вы можете поместить imeOptions как Готово, как это

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />

Я очищаю dunno wheather, которого вы пытаетесь достичь или нет. Любой способ взглянуть.

EDIT: android: singleLine устарела, поскольку API 3 из-за плохой производительности, вы должны использовать android: maxLines. singleLine будет доступен, потому что даже сейчас некоторые эффекты не поддерживаются атрибутом android: maxLines.

+42
30 окт. '14 в 4:56
источник

Я решил проблему, изменив следующее в файле XML:

 android:inputType="textMultiLine"

в

 android:inputType="textImeMultiLine"
+7
03 нояб. '14 в 3:31
источник

Ниже код работает для меня.

В XML:

    android:imeOptions="actionDone"
    android:inputType="textCapWords"

В JAVA CLASS:

    edit_text.setOnEditorActionListener(new OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    // TODO Auto-generated method stub

                    if ((actionId==EditorInfo.IME_ACTION_DONE )   )
                     {   
                        //Toast.makeText(getActivity(), "call",45).show();
                       // hide virtual keyboard
                       InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                       imm.hideSoftInputFromWindow(auto_data.getWindowToken(), 0);
                       return true;
                    }
                    return false;

                }
            });
+6
03 нояб. '15 в 7:12
источник

Принятый ответ устарел:

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
/>

Попробуйте следующее:

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:maxLines="1"
/>
+2
03 февр. '17 в 20:04
источник

EditText.xml

<EditText
        android:id="@+id/edit_text_searh_home"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:singleLine="true"
        android:lines="1"
        android:hint="Ingresa palabras claves"
        android:imeActionLabel="Search"
        android:background="@drawable/rounded_edit_text_search"
        android:drawableRight="@android:drawable/ic_menu_search"/>

Fragment.java

final EditText edit_text_searh = (EditText) v.findViewById(R.id.edit_text_searh_home);

    edit_text_searh.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(edit_text_searh.getWindowToken(), 0);

            Toast.makeText(getContext(),edit_text_searh.getText(),Toast.LENGTH_SHORT).show();
            return true;

        }
    });
+1
03 мая '16 в 19:39
источник

Попробуйте этот метод, он может решить вашу проблему.

protected void showKeyboard() {

            InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            if (activity.getCurrentFocus() == null) {
                inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
            } else {
                View view = activity.getCurrentFocus();
                inputMethodManager.showSoftInput(view,InputMethodManager.SHOW_FORCED);
            }
        }

        /**
         * Hide keyboard.
         */
        protected void hideKeyboard() {

            InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            View view = activity.getCurrentFocus();
            if (view == null) {
                if (inputMethodManager.isAcceptingText())
                    inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
            } else {
                if (view instanceof EditText)
                    ((EditText) view).setText(((EditText) view).getText().toString()); // reset edit text bug on some keyboards bug
                inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }          
        }
0
30 окт. '14 в 6:17
источник

Возможно, вы можете добавить атрибут в свой EditText следующим образом:

android:imeOptions="actionSearch"
0
30 окт. '14 в 4:47
источник

Посмотрите другие вопросы по меткам или Задайте вопрос