Intereting Posts
getAssets (); Из другого класса Android: Android 4.1 эмулятор, вызывающий onDateSet дважды из диалогового окна DatePicker Как поймать событие click на кнопке? Добавление библиотек поддержки в Android-проект Как я могу заставить сайт масштабироваться для исправления для мобильных устройств (Iphone android ..) Как создать сканер штрих-кода (Android)? Как отключить изменение ориентации на Android? Как создать объект retrofit.Response во время модульного тестирования с помощью дооснащения 2 Неверный запросКод в onActivityResult Может ли видеовидео воспроизводить видео, хранящееся на внутренней памяти? В eclipse не удалось ссылаться на проект библиотеки Android в другом проекте Android Android: как я могу заставить DrawerLayout передавать события касания к основному виду Отключить показ окна запуска в IntelliJ Определить, было ли приложение загружено с Android Маркета Android: принудительно нажмите EditText, чтобы удалить фокус?

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"