Intereting Posts
Получение настроек прокси-сервера Wi-Fi в Android Как использовать селекторы для изменения значков с помощью новой вкладки TabLayout Как получить национальные праздники в выбранной стране Где я могу найти исходный код Java для шифрования Vigenere? Цветная панель состояния Android в ящике Nav Селектор списка элементов GridView для нескольких элементов, не работающих в Android Android: 4.0.3 эмулятор закрыт автоматически через некоторое время Replace () не работает должным образом с несколькими фрагментами Как я могу назвать веб-сервис с помощью phonegap для Android Приложение не будет работать на устройстве: DELETE_FAILED_INTERNAL_ERROR? Начать действие с экрана предпочтений (намерение определено в файле xml) Ориентация устройства Android без геомагнитной Создание 9 патчей, доступных во время выполнения Поддержка unicode в android ndk Объявить конечную переменную, но установить позже

EditText теряет фокус при появлении клавиатуры; Требует двойного нажатия для редактирования

Я разрабатываю приложение, которое содержит расширяемый список. В конце каждого списка пустой EditText готов для получения комментариев. У меня есть следующая проблема; Когда я касаюсь EditText , экран слегка изменяется (не проблема, так как изменение размера не всегда происходит, в зависимости от моего макета и позиции списка EditText int EditText ), и появляется мягкая клавиатура. Однако во время этих событий EditText теряет фокус и не восстанавливает его. Это довольно неудобно, так как без фокуса, несмотря на доступность клавиатуры, вход с клавиатуры не доходит до EditText . Как только я снова коснусь его, EditText ведет себя так, как ожидалось.

Это становится еще страннее. Когда клавиатура все еще отображается, я могу коснуться другого EditText и это произойдет; Он теряет фокус. Однако, как только я прошел первоначальную потерю фокуса, я могу свободно перемещаться между ранее затронутыми EditText s без каких-либо проблем, связанных с фокусом. Только когда я скрою мягкую клавиатуру, исчезнет «состояние», и мне нужно будет дважды нажать EditText прежде чем сможете их редактировать.

Вот выдержки из моего кода. Во-первых, empty_comment.xml :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/blank_box" android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textCapSentences" android:imeOptions="actionDone" android:hint="@string/hint" android:layout_marginLeft="30dip" > </EditText> </LinearLayout> 

Здесь выдержка из фрагмента, где я использую рассматриваемый макет:

 convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_empty, null); final EditText editText = (EditText) convertView.findViewById(R.id.blank_box); editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId == EditorInfo.IME_ACTION_DONE) { // Unrelated code } return true; } }); 

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

Обновить:

Добавление строки в Activity для настройки панорамирования android:windowSoftInputMode="adjustPan" частично решает проблему. Он заменяет текущее непредвиденное поведение проблемой, что виды EditText могут быть скрыты с помощью мягкой клавиатуры.

На данный момент не найдено ни одного идеального решения, а подходило. Взгляните на комментарии в принятом ответе, они могут оказаться полезными для вас!

Solutions Collecting From Web of "EditText теряет фокус при появлении клавиатуры; Требует двойного нажатия для редактирования"

Вам нужно изменить в AndroidManifest.xml

Добавьте android:windowSoftInputMode="adjustPan" в действие, содержащее listview. Это решит вашу проблему.

 <activity android:name=".MyEditTextInListView" android:label="@string/app_name" android:windowSoftInputMode="adjustPan"> 

Решение состоит в том, чтобы опубликовать задержанную runnable, которая проверяет, все ли сосредоточено на просмотре EditText, а если нет, сосредоточьте его.

 editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(final View v, boolean hasFocus) { if (hasFocus) { // Request focus in a short time because the // keyboard may steal it away. v.postDelayed(new Runnable() { @Override public void run() { if (!v.hasFocus()) { v.requestFocus(); } } }, 200); } } }); 

У меня была та же проблема … Я решил это, расширив EditText.

Я создал onClickListener, и в этом методе у меня есть следующий код:

 public OnClickListener clickListener = new OnClickListener() { @Override public void onClick(View v) { EditTextInput.this.setFocusable(true); EditTextInput.this.setFocusableInTouchMode(true); EditTextInput.this.requestFocus(); } }; 

Затем я поместил следующий код в обратный вызов onKeyPreIme. Вам нужно будет расширить EditText, чтобы получить доступ к нему.

 @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK & event.getAction() == KeyEvent.ACTION_UP) { EditTextInput.clearFocus(); EditTextInput.this.setFocusable(false); EditTextInput.this.setFocusableInTouchMode(false); return false; } return super.dispatchKeyEvent(event); } 

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

Вы можете попробовать что-то вроде:

 editText.requestFocus(); 

Вы также можете установить это:

 android:windowSoftInputMode="stateHidden" 

В файле манифеста

Вы можете попробовать этот ниже код для android manifest.xml

Добавьте код в android manifest android: windowSoftInputMode = "adjustPan"

А также добавьте в xml-макет

 <EditText android:background="#FFFFFF" android:capitalize="sentences" android:inputType="textVisiblePassword" android:layout_height="35px" > <requestFocus /> 

У меня была эта проблема с android.support.design.widget.TextInputEditText и она была решена из-за изменения порядка флага в манифесте из:

 android:windowSoftInputMode="stateHidden|adjustPan" 

в

 android:windowSoftInputMode="adjustPan|stateHidden"