У меня есть EditText и кнопка, выровненная к нижней части родителя.
Когда я ввожу в него текст и нажимаю кнопку для сохранения данных, виртуальная клавиатура не исчезает.
Может ли кто-нибудь подсказывать мне, как скрыть клавиатуру?
У меня есть EditText и кнопка, выровненная к нижней части родителя.
Когда я ввожу в него текст и нажимаю кнопку для сохранения данных, виртуальная клавиатура не исчезает.
Может ли кто-нибудь подсказывать мне, как скрыть клавиатуру?
Это должно работать.
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 
Просто убедитесь, что this.getCurrentFocus() не возвращает null, что было бы, если бы ничего не было в фокусе.
Вы также можете определить imeOptions в EditText. Таким образом, клавиатура исчезнет после нажатия кнопки "Готово":
<EditText
    android:id="@+id/editText1"
    android:inputType="text"
    android:imeOptions="actionDone"/>
		   mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    // do something, e.g. set your TextView here via .setText()
                    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    return true;
                }
                return false;
            }
        });
и в xml
  android:imeOptions="actionDone"
		getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
		Решение включено в прослушиватель действий EditText:
public void onCreate(Bundle savedInstanceState) {
    ...
    ...
    edittext = (EditText) findViewById(R.id.EditText01);
    edittext.setOnEditorActionListener(new OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
            }
            return false;
        }
    });
    ...
    ...
}
		Я не видел никого, кто использовал этот метод:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean focused) {
        InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (focused)
            keyboard.showSoftInput(editText, 0);
        else
            keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }
});
А затем просто запросите фокус на editText:
editText.requestFocus();
		Я нашел это, потому что мой EditText не был автоматически уволен при вводе.
Это был мой оригинальный код.
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))) {
            // Do stuff when user presses enter
            return true;
        }
        return false;
    }
});
Я решил это, удалив строку
return true;
после ввода информации, когда пользователь нажимает кнопку ввода.
Надеюсь, это поможет кому-то.
Борьба с этим в последние дни и нашли решение, которое работает очень хорошо. Мягкая клавиатура скрыта, когда прикосновение сделано вне любой области EditText.
Код, размещенный здесь: скрыть клавиатуру по умолчанию при нажатии на андроид
Просто запишите эти две строки кода, где будет работать опция ввода.
InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
		Я использую этот метод для удаления клавиатуры из текста редактирования:
 public static void hideKeyboard(Activity activity, IBinder binder) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (binder != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS
            inputManager.showSoftInputFromInputMethod(binder, 0);
        }
    }
}
И этот метод для удаления клавиатуры из активности (не работает в некоторых случаях - например, когда edittext, к которой привязана клавиатура, потерял фокус, это не сработает. Но для других ситуаций это отлично работает, и вы не нужно заботиться о элементе, который держит клавиатуру)
 public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
            inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }
}
		Вы можете видеть отмеченный ответ сверху. Но я использовал getDialog().getCurrentFocus() и хорошо работал. Я отправляю этот ответ, потому что я не могу напечатать "this" в своем oncreatedialog.
Итак, это мой ответ. Если вы пробовали отмеченный ответ и не работали, вы можете просто попробовать следующее:
InputMethodManager inputManager = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(getDialog().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
		int klavStat = 1; // for keyboard soft/hide button
int inType;  // to remeber your default keybort Type
editor - это поле EditText
/// metod for onclick button ///
 public void keyboard(View view) {
        if (klavStat == 1) {
            klavStat = 0;
            inType = editor.getInputType();
            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
            editor.setInputType(InputType.TYPE_NULL);
            editor.setTextIsSelectable(true);
        } else {
            klavStat = 1;
            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
            editor.setInputType(inType);
        }
    }
Если у у меня есть поле EditText для поля, вам нужно наблюдать за сменой фокуса
вы можете легко создать класс singleton для вызова следующим образом:
public class KeyboardUtils {
    private static KeyboardUtils instance;
    private InputMethodManager inputMethodManager;
    private KeyboardUtils() {
    }
    public static KeyboardUtils getInstance() {
        if (instance == null)
            instance = new KeyboardUtils();
        return instance;
    }
    private InputMethodManager getInputMethodManager() {
        if (inputMethodManager == null)
            inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE);
        return inputMethodManager;
    }
    @SuppressWarnings("ConstantConditions")
    public void hide(final Activity activity) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                try {
                    getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
поэтому после того, как вы можете вызвать в действии, как следующая форма:
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        KeyboardUtils.getInstance().hide(this);
    }
}
		editText.setInputType(InputType.TYPE_NULL);