Подтвердить что ты не робот

Запретить отключение программной клавиатуры на кнопке обратной связи Android

У меня есть активность с edittext. когда активность приходит, я всегда фокусирую внимание на Edittext. я сделал панель инструментов всегда видимой, указав

android:windowSoftInputMode="stateAlwaysVisible" 

в манифесте. Я выполняю функциональные возможности нажатием кнопки "Готово" на клавиатуре. На самом деле, моя потребность в том, что клавиатура должна всегда отображаться, когда пользователь находится в этом действии. теперь я отключил кнопку "Назад", переопределив и ничего не делая.

@Override
public void onBackPressed() {
    // Do nothing
}

но программная клавиатура увольняется на заднем пульте. как избавиться от этого. Я пробовал это Предотвращать отклонение мягкой клавиатуры, но все же на задней клавиатуре пресс-секретаря увольняют. Но он возвращается снова, нажимая кнопку "Назад", "Мне нужно, чтобы при нажатии на нее не было отклонено softkeyboard. Любая помощь будет оценена.

4b9b3361

Ответ 1

создайте один пользовательский EditText, например, следуйте одному интерфейсу:

public class CustomEditText extends EditText {


    public void setHandleDismissingKeyboard(
        handleDismissingKeyboard handleDismissingKeyboard) {
           this.handleDismissingKeyboard = handleDismissingKeyboard;
    }

    private handleDismissingKeyboard handleDismissingKeyboard;

    public interface handleDismissingKeyboard {
        public void dismissKeyboard();
    }

    @SuppressLint("NewApi")
    public CustomEditText(Context context, AttributeSet attrs,
                             int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }


    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
                && event.getAction() == KeyEvent.ACTION_UP) {
            handleDismissingKeyboard.dismissKeyboard();
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

то в вашей активности создайте инициализацию вашего CustomEditText и используйте:

customEditText.setHandleDismissingKeyboard(this);

затем реализуем метод класса и переопределения и помещаем ваш код в

для получения дополнительной информации о моем ответе все, что вам нужно, это onKeyPreIme, вы можете переопределить это в своем классе EditText (как я отправляю для вас), чтобы обрабатывать все клавиши, такие как задний ключ или любую другую клавиатурную клавишу, Я поместил один внутренний интерфейс в пользовательский класс, чтобы получить обратный вызов из этого класса для каждого вида деятельности или класса, который вы хотите, вы также можете сделать это со статическим методом, и поскольку вы хотите предотвратить отключение клавиатуры, вы можете просто вернуть true в том, что.

для использования CustomEditText вы можете использовать xml или в java, определить это и инициализировать это, как и другие виджеты (Button, TextView,...), и только разные вам нужно определить это в вашем xml, например:

 <yourPackage.CustomEditText ..... />