Программная клавиатура не закрывается при отмене диалога - PullRequest
1 голос
/ 04 февраля 2020

В моем приложении у меня есть диалоговое окно, где пользователь должен ввести текст в текст редактирования. Но когда я нажимаю за пределами диалогового окна, чтобы закрыть диалоговое окно, диалоговое окно закрывается, но программная клавиатура, которая выскочила, потому что я нажал на тексте редактирования, остается. Это очень странно: когда я устанавливаю windowsoftinputmode в stateAlwaysHidden, клавиатура становится немного прозрачной, но не закрывается. У меня есть только эта проблема в портретной, в альбомной это не происходит, но это может быть потому, что программная клавиша заполняет весь экран. Я также не могу нажать на клавиши клавиатуры, она не реагирует. Я уже пытался установить режим windowsoftinput на разные значения, и я установил oncancellistener на моем dialo g, который должен закрыть экранную клавиатуру, но это не так. Это кажется мне ошибкой.

Код моего диалога

public void create(View view) {

        final Dialog dialog = new Dialog(this);
        dialog.requestWindowFeature(Window.FEATURE_SWIPE_TO_DISMISS);
        dialog.setContentView(R.layout.dialoglayout);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.show();
        dialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
            @Override
            public void onCancel(DialogInterface dialog) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);

                View view = getCurrentFocus();

                if (view == null) {
                    view = new View(getBaseContext());
                }
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        });
        editText = dialog.findViewById(R.id.levelname);
        editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    name = editText.getText().toString();
                    callables.totaloverwriteFile(name,getApplicationContext(),"newlevelname");
                    getApplicationContext().startActivity(new Intent(getApplicationContext(), CreatorActivity.class));
                    return true;
                }
        return true;
            }
        });


    }```

1 Ответ

0 голосов
/ 05 февраля 2020

Попробуйте построить InputMethodManager из контекста, что-то вроде этого (kotlin)

    val inputMethodManager = context?.getSystemService<InputMethodManager>()
    inputMethodManager?.hideSoftInputFromWindow(view.windowToken,0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...