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

Было потрачено много времени на решение проблемы, и она выглядит легкой, но я очень устал и не мог найти решение. У меня есть действие, действие имеет 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 имеет фокус с ЗЕЛЕНОЙ границей, а курсор мигает. По прошествии нескольких секунд AdvBanner загружается и отображается. Когда это происходит, редактируемый EditText теряет фокус... с этого момента моя жизнь становится похожей на кошмар.

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

Задача 1. Если в В ЭТОТ МОМЕНТ(когда Adv загружается и появляется ), пользователь редактирует поле EditText с помощью экранной клавиатуры, фокус теряется, граница приобретает СЕРЫЙ цвет,и если пользователь продолжает вводить текст, это не дает результата -символы не печатаются (КУРСОР в 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 остается СЕРОЙ...

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

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

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

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

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

12
задан Dimon 1 July 2012 в 12:18
поделиться