Dużo czasu poświęcono na rozwiązanie problemu i wygląda na łatwe, ale jestem bardzo zmęczony i nie mogłem znaleźć rozwiązania. Mam aktywność, aktywność ma 4 komponenty EditText, 2 z nich ma wyskakujące menu (AlertDialog), które zawiera listę, następna - jest wyłączona dla edycji, a ostatnia - jest edytowalna i powinna pokazywać klawiaturę, kiedy użytkownik dotyka go.requestFocus nie działa poprawnie w EditText
Ponadto, mój root LinearLayout ma LinearLayout, który zawiera wewnątrz RelativeLayout. Ostatnia z nich to AdvBanner. Last LinearLayout (RelativeLayout) jest wyrównany do dolnej części układu głównego.
Część XML, który opisuje go:
<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>
Kiedy działalność jest zacząć, edycji EditText ma ostrość GREEN granicy i kursor miga. Po kilku sekundach AdvBanner zostaje załadowany i pokazany. Kiedy to się dzieje, Editable EditText stracił ostrość ... od tego momentu moje życie będzie jak koszmar.
Spójrzmy krok po kroku.
Zadanie 1. Jeśli w tej chwili (Adv gdy załadowany i pojawia) użytkownik edytuje pole EditText za pomocą miękkiej klawiatury, ostrość jest stracone, granica wziąć GREY kolor, a jeśli użytkownik nadal pisanie tekstu nie przynosi rezultatów - symbole nie są drukowane (CURSOR w EditText jest zbyt zagubiony).
Uważam, że każdy użytkownik będzie denerwował się - podczas pisania tekstu kursor jest nieaktywny, ponieważ w tle jest ładowany jakiś adv i skupia się on na sobie.
Aby rozwiązać ten problem, w metodzie, gdy Adv jest ładowany (jest pokazany), staram się ręcznie skupić się 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 klawiatura jest aktywna, użytkownik nadal może wpisywać tekst, ale granica pola EditText pobyt GRAY ...
UWAGA: właściwie, nie jestem pewna różnicy między ZIELONĄ i SZARE granicą ostrego EditText .. ZIELONY jest zwykle wtedy, gdy użytkownik dotyka go, a SZARY, prawdopodobnie, gdy chcemy ręcznie poprosić o skupienie (za pomocą requestFocus() itp.)
Problem 2. (W wyniku solwatacji Probl em # 1). Po zamknięciu miękkiej klawiatury, jeśli użytkownik stuknie w edytowalne pole EditText, przyjmuje ostrość, a wewnątrz pojawia się kursor, ale nie ma reakcji na ponowne wyświetlenie miękkiej klawiatury! Dotknięcie nie pokazuje miękkiej klawiatury, ale wygląda jak pole edycji w trybie kopiowania - kiedy użytkownik może wybrać tekst i wyciąć/skopiować go do schowka.
Mój cel jest łatwy do pierwszego spojrzenia. Chcę tylko ZACHOWAĆ kursor i ustawić ostrość na edytowalne pole EditText (CountEdit1), gdy wyświetlana jest klawiatura ekranowa i użytkownik wpisuje tekst. I normalna reakcja, gdy użytkownik dotyka EditText - jak zwykle po prostu pokaż mi miękką klawiaturę!
Przeczytałem wszystkie problemy tutaj, połączyłem różne metody (clearFocus, requestFocusFromTouch itp.), Po prostu za mało czasu i miejsca, aby opisać wszystko, co próbowałem zrobić, aby rozwiązać ten problem.Główne problemy zostały opisane powyżej.
Nadzieja na pomoc i rozwiązanie problemu ... Z góry dzięki ..
Dzięki, ale ten kod nie Rozwiąż problem. Wcześniej grałem też z tym samym kodem. Wrzuciłem go do mojej klasy aktywności, ale wciąż nie mam postępu. Oprócz głównego opisu mam 2 sposoby na połowiczne rozwiązywanie: 1) jeśli usunę CountEdit1.requestFocus(); z publicznej pustki onAdLoaded(), wtedy Soft Keyboard pojawia się, jeśli użytkownik stuknął w EditText nawet po załadowaniu Adv, ALE .. jeśli Adv załadowano podczas softkeyboard, użytkownik stracił kursor w polu EditText i nie mógł kontynuować wprowadzania tekstu. – Dimon
2) z CountEdit1.requestFocus(); w onAdLoaded(), użytkownik jest w stanie kontynuować edycję pola po wczytaniu Adv, ale po zamknięciu Softkeyboard, kolejne kliknięcie przez EditText nie pokazuje ponownie miękkiej klawiatury! Ta sytuacja mnie tak bardzo zmęczyła. – Dimon
Czy nie chcesz też ręcznie wyświetlać miękkiej klawiatury, jeśli nie pojawia się ona sama? – Swayam