Много времени было потрачено на решение проблемы, и это выглядит просто, но я действительно устал и не смог найти решение. У меня есть Activity, активность имеет 4 компонента EditText, у 2 из которых есть всплывающее меню (AlertDialog), которые содержат список, следующий - отключен для редактирования, а последний - доступен для редактирования и должен показывать мягкую клавиатуру, когда пользователь нажав на него.
Кроме того, у моего root LinearLayout есть LinearLayout, которые содержат внутри RelativeLayout. Последнее необходимо для AdvBanner. Последний LinearLayout (RelativeLayout) выровнен по нижней части корневого макета.
Часть XML, которая описывает это:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="bottom"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="bottom">
<RelativeLayout
android:id="@+id/AdvLayoutReserveArea"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#FFFFFF"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="bottom" />
</LinearLayout>
Когда действие начинается, редактируемый EditText имеет фокус с ЗЕЛЕНЫМ, а курсор мигает. Через несколько секунд AdvBanner загружается и отображается. Когда это произойдет, редактируемый EditText потерял фокус.. с этого момента моя жизнь будет как кошмар.
Посмотрите шаг за шагом.
Проблема 1. Если в ЭТОТ МОМЕНТ (когда Adv загружен и появляется), пользователь редактирует поле EditText с помощью мягкой клавиатуры, фокус теряется, на границе выделяется цвет СЕРЫЙ, и если пользователь продолжает для ввода текста нет результата - символы не печатаются (CURSOR в EditText слишком утерян).
Я ДУМАЮ, что любой пользователь будет раздражен - когда вы вводите текст, а курсор неактивен, потому что в фоновом режиме загружается какая-то команда, и она фокусируется на себе.
Чтобы решить эту проблему, в методе, когда загружен Adv (показано), я пытаюсь вернуться к фокусу вручную в EditText методом requestFocus.
public void onAdLoaded()
{
// TODO Auto-generated method stub
// add app specific code for this event here...
// called when an ad is successfully displayed on device
CountEdit1.requestFocus();
}
Да, курсор возвращается в поле EditText, и если мягкая клавиатура активна, пользователь все равно может печатать текст, но граница поля EditText остается GREY...
ПРИМЕЧАНИЕ: на самом деле я не уверен в различии между GREEN и GREY границем сфокусированного EditText. GREEN обычно используется, когда пользователь нажимает на него, и GREY, возможно, когда мы хотим запросите фокус вручную (используя requestFocus() и т.д.)
Задача 2. (В результате задачи сольватации №1). После того, как мягкая клавиатура была закрыта, если пользователь нажимает на редактируемое поле EditText, он принимает фокус и курсор появляется внутри, но не реагирует на показ мягкой клавиатуры! Нажатие на него не отображает мягкую клавиатуру, но выглядит как поле редактирования в режиме копирования - когда пользователь может выбрать текст и вырезать/скопировать его в буфер обмена.
Моя цель проста для первого взгляда. Я просто хочу СОХРАНИТЬ курсор и сфокусироваться на редактируемое поле EditText (CountEdit1), пока отображается мягкая клавиатура, и пользователь вводит текст. И нормальная реакция, когда пользователь нажимает EditText - как обычно, просто покажите мне мягкую клавиатуру!
Я читал все вопросы здесь, я объединил разные методы (clearFocus, requestFocusFromTouch и т.д.), просто недостаточно времени и пространства, чтобы описать все, что я пытался сделать, чтобы решить эту проблему. Основные проблемы описаны выше.
Надеюсь на помощь и решение проблемы... Спасибо заранее.