requestFocus не работает должным образом для EditText

Много времени было потрачено на решение проблемы, и это выглядит легко, но я очень устал и не смог найти решение. У меня есть Activity, у Activity есть 4 компонента EditText, 2 из них имеют всплывающее меню (AlertDialog), которое содержит список, следующий - отключен для редактирования, а последний - редактируемый, и должен отображать программную клавиатуру, когда пользователь нажав на него.

Кроме того, мой корневой 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 фокусируется сGREEN рамка и курсор мигают. Через несколько секунд AdvBanner загружается и отображается. Когда это происходит, редактируемый EditText теряет фокус ... с этого момента моя жизнь становится кошмаром.

Давайте посмотрим шаг за шагом.

Problem 1. If in THIS MOMENT (когда загружается и отображается Adv) пользователь редактирует поле EditText с помощью программной клавиатуры, фокус теряется, граница занимаетGRAY цвет, и если пользователь продолжает набирать текст, то ничего не получится - символы не печатаются (CURSOR в EditText слишком потерян).

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

Чтобы решить эту проблему, в методе, когда 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 остается СЕРЫМ ...

NOTE: на самом деле я не уверен в разнице между ЗЕЛЕНЫЙ и СЕРЫЙ границами сфокусированного EditText. ЗЕЛЕНЫЙ обычно - когда пользователь нажимает на него, и СЕРЫЙ, вероятно, когда мы хотим запросить фокус вручную (используя requestFocus () и т. д.)

Problem 2. (В результате решения задачи № 1). После закрытия программной клавиатуры, если пользователь нажмет на редактируемое поле EditText, он получит фокус и курсор появится внутри, но никакой реакции на отображение программной клавиатуры снова не будет! Нажатие на нее не отображает программную клавиатуру, но выглядит как поле редактирования в режиме копирования - когда пользователь может выбрать текст и вырезать / скопировать его в буфер обмена.

Моя цель проста для первого взгляда. Я просто хочу сохранить курсор и сфокусироваться на редактируемом поле EditText (CountEdit1), пока отображается программная клавиатура и пользователь печатает какой-то текст. И нормальная реакция, когда пользователь нажимает EditText - как обычно, просто покажи мне программную клавиатуру!

Я прочитал все вопросы здесь, я объединил разные методы (clearFocus, requestFocusFromTouch и т. Д.), Просто не хватило времени и места, чтобы описать все, что я пытался сделать, чтобы решить эту проблему. Основные проблемы описаны выше.

Надеюсь на помощь и решение проблемы ... Заранее спасибо..

Ответы на вопрос(5)

Ваш ответ на вопрос