Android: EditText внутри Scrollview: заблокировать автопоказ программной клавиатуры

Когда действие имеет EditText внутри прокрутки, экранная клавиатура отображается автоматически.

Но EditText не является главной особенностью Activity.

Как предотвратить автоматическое отображение SoftKeyboard при создании Activity?

Некоторые вещи не решают проблему:

  • Добавление кода для скрытия программной клавиатуры вызывает проблемы с ее повторным отображением:

    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

  • или в манифесте: android:windowSoftInputMode="stateAlwaysHidden"


person user51679010298452792389345527    schedule 29.07.2015    source источник
comment
возможный дубликат автоматического появления экранной клавиатуры Android   -  person Anson VanDoren    schedule 29.07.2015
comment
@ShabbirDhangot вызывает проблемы с повторным отображением программной клавиатуры, я сказал это в редактировании вопроса, но редактор просто вырезал это из вопроса.   -  person user51679010298452792389345527    schedule 29.07.2015
comment
@AnsonVanDoren, на этот вопрос нет ответа.   -  person user51679010298452792389345527    schedule 29.07.2015


Ответы (4)


Вы можете использовать этот код в своем методе onCreate...

  this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
person Rishad Appat    schedule 29.07.2015

вы можете использовать edittext.clearFocus(); или добавить android:windowSoftInputMode="stateHidden"

person Nithin Np    schedule 29.07.2015

Вам просто нужно удалить EditText фокус.

1-добавьте android:windowSoftInputMode="stateHidden" к тегу активности в манифесте

or

2-используйте this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

or

3-использовать edittext.clearFocus();

or

4- набор

    android:focusable="true"
    android:focusableInTouchMode="true" 

для другого просмотра.

Примечание. edittext.clearFocus();может не работать, потому что он возвращает фокус на другое фокусируемое представление в действии, поэтому в одном представлении он просто сбрасывает возможность фокусировки на то же представление.

person Ahmad Sanie    schedule 29.07.2015
comment
Нет, на самом деле он не очищает фокус, а просто устанавливает фокус на другое представление, и editText восстанавливает возможность фокуса, когда выполняется другое событие onClick. Ознакомьтесь с документацией: developer.android.com/reference/android/widget/EditText.html - person Ahmad Sanie; 29.07.2015
comment
решения 1 и 2 вызывают проблемы с повторным отображением экранной клавиатуры. - person user51679010298452792389345527; 29.07.2015
comment
Вам нужен ответ или вы хотите прочесть мне лекцию по введению в философию? ответ выше, вы принимаете его, потому что это правильно или нет, и еще одна вещь, которую вам нужно удалить, потому что это неуместно и неправильно - person Ahmad Sanie; 29.07.2015

Правильный способ заблокировать автоматическое отображение программной клавиатуры — запретить ей фокусироваться на EditText.

Для каждого edittext в вашем макете:

onCreate()
    editText = (EditText)findViewById(R.id.edittext);
    editText.setFocusable(false);

В вашем файле макета xml:

<EditText
    ...
    android:onClick="enableFocusable"

Затем в классе java метод...

public void enableFocusable(View view) {
    editText.setFocusableInTouchMode(true);
    editText.requestFocus();
    if (view.requestFocus()) {
        InputMethodManager imm = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
    }
}
person user51679010298452792389345527    schedule 29.07.2015