requestFocus nie działa poprawnie dla EditText

Wiele czasu poświęcono na rozwiązanie problemu i wygląda to na łatwe, ale jestem naprawdę zmęczony i nie mogłem znaleźć rozwiązania. Mam Aktywność, aktywność ma 4 składniki EditText, 2 z nich ma menu kontekstowe (AlertDialog), które zawiera listę, następne - jest wyłączone do edycji, a ostatnie - jest edytowalne i powinno wyświetlać klawiaturę miękką, gdy użytkownik jest stukając w niego.

Ponadto mój root LinearLayout ma LinearLayout, który zawiera wewnątrz RelativeLayout. Ostatni jest potrzebny do AdvBanner. Ostatni LinearLayout (RelativeLayout) jest wyrównany do dolnej części układu głównego.

Ta część XML, która to opisuje:

  <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>

Po rozpoczęciu aktywności można edytować edytowalny tekstZIELONY granica i kursor migają. Po kilku sekundach załadowano i pokazano AdvBanner. Kiedy to się stanie, edytowalny EditText stracił ostrość ... od tego momentu moje życie jest jak koszmar.

Spójrzmy krok po kroku.

Problem 1. Jeśli jestTEN MOMENT (gdy Adv zostanie załadowany i pojawi się) użytkownik edytuje pole EditText za pomocą klawiatury programowej, ostrość jest tracona, obramowanie przyjmuje aSZARY kolor, a jeśli użytkownik kontynuuje wpisywanie tekstu, nie ma wyniku - symbole nie są drukowane (CURSOR w EditText jest zbyt zagubiony).

MYŚLĘ, że każdy użytkownik będzie zirytowany - kiedy wpisujesz tekst, a kursor jest nieaktywny, ponieważ w tle ładowany jest adv i skupia się on na sobie.

Aby rozwiązać ten problem, w metodzie, gdy Adv jest załadowany (pokazane), próbuję ręcznie ustawić fokus na EditText metodą 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();
}

Tak, kursor powraca do pola EditText, a jeśli aktywna jest klawiatura miękka, użytkownik może nadal pisać tekst, ale obramowanie pola EditText pozostaje SZARY ...

UWAGA: właściwie nie jestem pewien co do różnicy między ZIELONYM i SZARYM krawędzią skupionego tekstu edycji .. ZIELONY jest zwykle wtedy, gdy użytkownik stuka w niego, a SZARY, prawdopodobnie, kiedy chcemy ręcznie ustawić ostrość (używając requestFocus () itp.)

Problem 2. (W wyniku problemu solwatacji nr 1). Po zamknięciu klawiatury programowej, jeśli użytkownik dotknie edytowalnego pola EditText, ustawi ostrość, a kursor pojawi się w środku, ale bez reakcji na wyświetlanie klawiatury programowej! Naciśnięcie go nie powoduje wyświetlenia klawiatury programowej, ale wygląda jak pole edycji w trybie kopiowania - gdy użytkownik może wybrać tekst i wyciąć / skopiować go do schowka.

Mój cel jest łatwy do pierwszego spojrzenia. Chcę tylko zapisać kursor i skupić się na edytowalnym polu EditText (CountEdit1), gdy wyświetlana jest klawiatura miękka, a użytkownik wpisuje jakiś tekst. I normalna reakcja, gdy użytkownik dotyka EditText - jak zwykle, po prostu pokaż mi klawiaturę!

Przeczytałem tutaj wszystkie problemy, połączyłem różne metody (clearFocus, requestFocusFromTouch itp.), Nie wystarczy czasu i miejsca, aby opisać wszystko, co próbowałem zrobić, aby to rozwiązać. Główne problemy opisano powyżej.

Mam nadzieję na pomoc i rozwiązanie problemu ... Z góry dziękuję ..

questionAnswers(5)

yourAnswerToTheQuestion