Автоматическая всплывающая клавиатура при запуске Activity - PullRequest
95 голосов
/ 12 января 2011

У меня относительно простой вопрос. У меня есть активность с большим количеством EditText в них. Когда я открываю действие, оно автоматически фокусируется на первом тексте EditText и отображает виртуальную клавиатуру.

Как я могу предотвратить это?

Ответы [ 17 ]

1 голос
/ 11 мая 2015

Интересно, что в этой документации https://developer.android.com/training/keyboard-input/visibility.html говорится, что когда начинается действие и фокусируется на текстовом поле, экранная клавиатура не отображается (а затем показывается, как отобразить клавиатуру, если вы хочу с некоторым кодом).

На моем Samsung Galaxy S5 так работает мое приложение (без ввода манифеста или определенного кода) - без программной клавиатуры. Однако на Lollipop AVD показана программная клавиатура, что противоречит приведенному выше документу.

Если вы получаете такое поведение при тестировании в AVD, вы можете протестировать на реальном устройстве, чтобы увидеть, что происходит.

1 голос
/ 13 февраля 2017

У этого есть несколько хороших ответов в следующем посте: Остановите EditText, чтобы получить фокус при запуске Activity . Я регулярно использую следующий код от Morgan :

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext"     
    android:nextFocusLeft="@id/autotext"/>

ПРИМЕЧАНИЕ: Пустой элемент должен быть РАЗМЕЩЕН ПРАВО ПЕРЕД Фокусируемым элементом.

И я думаю, что он должен прекрасно работать даже с ScrollView, и у него не было проблем с доступностью.

0 голосов
/ 14 декабря 2018

Добавьте приведенный ниже код в верхнюю часть XML-файла активности и убедитесь, что представление находится над EditText

<View 
android:layout_width="0dp"
android:layout_height="0dp"
android:focusableInTouchMode="true"/>
0 голосов
/ 20 марта 2018

android: windowSoftInputMode = "stateHidden | AdjustResize"

Работает нормально

0 голосов
/ 31 мая 2012

Если в вашем представлении есть EditText и Listview, то клавиатура откроется по умолчанию. Чтобы скрыть клавиатуру от всплывающих окон по умолчанию, выполните следующие действия:

this.listView.requestFocus();

Убедитесь, что вы запрашиваете фокус на просмотре списка после получения представления для editText.

Например,

this.listView = (ListView) this.findViewById(R.id.list);
this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch);
this.listView.requestFocus();

Если вы сделаете это, то editText получит фокус и появится клавиатура.

0 голосов
/ 07 октября 2016

Принятый ответ не работает для меня, , поэтому дайте ответ рабочее решение, может быть, это полезно!

EditText edt = (EditText) findViewById(R.id.edt);
edt.requestFocus();    
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

Теперь клавиатура открыта наслаждайтесь:)

0 голосов
/ 16 марта 2016

Это происходит, когда ваш EditText автоматически получает фокус, как при начале вашей деятельности.Таким образом, один простой и стабильный способ исправить это - просто установить начальный фокус на любое другое представление, например на кнопку и т. Д.

Вы можете сделать это в своем XML-макете, код не требуется ..

...