Как предотвратить всплывающее окно клавиатуры для редактирования текста во время загрузки действия

#android #android-activity #android-edittext #android-softkeyboard

#Android #android-активность #android-edittext #android-softkeyboard

Вопрос:

У меня есть действие опроса, которое состоит из таких параметров, как переключатель, флажок, текстовое поле. Я использую EditText для получения ответа пользователя для текстового поля. Я динамически раздуваю EditText из адаптера просмотра recycler. Но всякий раз, когда вызывается это действие, клавиатура также появляется с курсором в поле редактирования текста. Но я хочу, чтобы клавиатура открывалась только тогда, когда пользователь касается EditText. Я попробовал несколько возможных методов, но не сработал и нуждаюсь в вашей помощи. Заранее спасибо!!

 fun showTextBox(answerLL : LinearLayout, currentItem : QuestionList, position: Int, draftOptions : MutableList<Draft>) {
    answerLL.removeAllViews()
    var optMaster : OptionMaster
    answerLL.setPadding(0, 0, 55, 0)
    val et = EditText(mActivity)
    et.setMinLines(1);
    et.setMaxLines(10);
    et.setCursorVisible(true);
    et.requestFocusFromTouch();
 //   et.requestFocus()
    et.setFocusableInTouchMode(true)
    val lp = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    et.setLayoutParams(lp);
    et.setTextIsSelectable(true);
    et.setGravity(Gravity.START);
    et.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
    et.setPaddingRelative(15, 7, 7, 7);
    et.setPadding(15, 7, 7, 7);
    et.setTextColor(Color.BLACK);
    et.addTextChangedListener(object: TextWatcher{
        override fun afterTextChanged(s: Editable?) {

                textListener.textValueEntered(currentItem.questionMaster.qmID, s.toString())

        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        }

        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
        }
    })
    for(draft in draftOptions){
        if (draft.quesId == currentItem.questionMaster.qmID){
            et.setText(draft.optValue)
        }
    }
    answerLL.addView(et)
    }
  

Комментарии:

1. Сделайте первое (сначала по вертикали) Текстовое поле или любой другой не редактируемый текст focusable . Ваш текст редактирования, вероятно, является первым фокусируемым элементом в макете, и именно поэтому открывается клавиатура. Или … копайте глубже и выясняйте, почему оно открывается.

2. Но по умолчанию фокусируется первый фокусируемый элемент, и если он становится EditText, клавиатура будет отображаться. Простое решение — сделать что-то еще над ним (или перед ним) также фокусируемым. Более сложное решение состоит в том, чтобы определить, следует ли открывать клавиатуру и когда это произойдет, и программно закрывать клавиатуру до тех пор, пока она не будет открыта. Или измените фокусировку текста редактирования до тех пор, пока он не будет готов к приему ввода (например, когда действие завершит загрузку)

3. @vishnu jm когда вы добавляете текст редактирования, вы установили фокус редактирования текста на false, только таким образом вы можете достичь того, что вам нужно, et.setFocusableInTouchMode(false); et.setFocusable(false);

Ответ №1:

проверьте свой windowSoftInputMode атрибут в файле манифеста, теге activity