requestFocus funktioniert für EditText nicht richtig

Es wurde viel Zeit aufgewendet, um das Problem zu lösen, und es sieht einfach aus, aber ich bin sehr müde und konnte keine Lösung finden. Ich habe eine Aktivität, die Aktivität hat 4 EditText-Komponenten, 2 davon haben ein Popup-Menü (AlertDialog), das die Liste enthält, die nächste - zum Bearbeiten deaktiviert und die letzte - kann bearbeitet werden und sollte die Soft-Tastatur anzeigen, wenn der Benutzer dies tut darauf tippen.

Außerdem hat mein Root-LinearLayout LinearLayout, das RelativeLayout enthält. Der letzte ist für AdvBanner erforderlich. Das letzte lineare Layout (Relatives Layout) wird am unteren Rand des Stammlayouts ausgerichtet.

Der Teil von XML, der es beschreibt:

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

Wenn die Aktivität gestartet wird, hat editierbarer EditText den Fokus mitGRÜN Rahmen und Cursor blinken. Nach wenigen Sekunden wird der AdvBanner geladen und angezeigt. Wenn es passiert, hat editierbarer EditText den Fokus verloren. Von diesem Moment an ist mein Leben wie ein Albtraum.

Lassen Sie uns Schritt für Schritt schauen.

Problem 1. Wenn inDIESER MOMENT (Wenn Adv geladen ist und angezeigt wird) Der Benutzer bearbeitet ein EditText-Feld über die Soft-Tastatur. Der Fokus geht verlorenGRAU Farbe, und wenn der Benutzer weiterhin einen Text eingibt, hat dies kein Ergebnis - Symbole werden nicht gedruckt (CURSOR in EditText ist zu verloren).

Ich denke, jeder Benutzer wird genervt sein - wenn Sie Text eingeben und der Cursor inaktiv ist, weil im Hintergrund etwas adv geladen ist und es den Fokus für sich selbst übernimmt.

Um dies zu lösen, versuche ich in der Methode, wenn Adv geladen ist (wird angezeigt), den Fokus manuell durch die requestFocus-Methode auf EditText zurückzusetzen.

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();
}

Ja, der Cursor kehrt zum EditText-Feld zurück. Wenn die Funktionstastatur aktiviert ist, kann der Benutzer weiterhin Text eingeben, der Rand des EditText-Felds bleibt jedoch grau.

HINWEIS: Eigentlich bin ich mir nicht sicher über den Unterschied zwischen GRÜN und GRAU Grenze von fokussiertem EditText. GRÜN ist normalerweise, wenn der Benutzer darauf tippt, und GRAU, wahrscheinlich, wenn wir einen Fokus manuell anfordern möchten (mit requestFocus () usw.).

Problem 2. (Als Ergebnis des Solvatationsproblems Nr. 1). Wenn der Benutzer nach dem Schließen der Funktionstastatur auf das bearbeitbare EditText-Feld tippt, wird der Fokus übernommen und der Cursor wird angezeigt. Es erfolgt jedoch keine Reaktion, wenn die Funktionstastatur erneut angezeigt wird. Wenn Sie darauf tippen, wird keine Bildschirmtastatur angezeigt, sondern das Bearbeitungsfeld wird im Kopiermodus angezeigt, wenn der Benutzer einen Text auswählen und ausschneiden / in die Zwischenablage kopieren kann.

Mein Ziel ist einfach für einen ersten Blick. Ich möchte nur den Cursor SPEICHERN und auf das bearbeitbare EditText-Feld (CountEdit1) fokussieren, während die Bildschirmtastatur angezeigt wird und der Benutzer Text eingibt. Und normale Reaktion, wenn Benutzer auf EditText tippen - zeigen Sie mir wie gewöhnlich nur die Soft-Tastatur!

Ich habe hier alle Probleme gelesen und verschiedene Methoden kombiniert (clearFocus, requestFocusFromTouch usw.), aber nicht genug Zeit und Raum, um alles zu beschreiben, was ich versucht habe, um dieses Problem zu lösen. Die Hauptprobleme sind oben beschrieben.

Hoffe auf Hilfe und löse das Problem ... Danke im Voraus ..

Antworten auf die Frage(5)

Ihre Antwort auf die Frage