Ich habe also ein scheinbar häufiges Problem: Der EditText in meinem Dialogfeld wird nicht angezeigt, wenn er fokussiert wird. Ich habe mehrere Problemumgehungen gesehen, wie in diesem Thread , diesem und diesem (und vielen weiteren), aber ich habe nie eine zufriedenstellende Erklärung dafür gesehen, warum dies überhaupt geschieht.
Ich würde es vorziehen, wenn Android sein eigenes Standardverhalten für EditTexts verwendet, als mein eigenes zu erstellen, aber es scheint, dass jeder (in diesen Threads) akzeptiert hat, dass das Standardverhalten für EditTexts in Dialogen darin besteht, nur einen Cursor und keine Tastatur anzugeben. Warum sollte das so sein?
Für die Aufzeichnung scheint keine dieser Problemumgehungen für mich zu funktionieren - die nächste Möglichkeit, die ich erreichen konnte, besteht darin, eine Tastatur unter dem Dialogfeld anzuzeigen (mithilfe von InputMethodManager.toggleSoftKeyboard (*)). Meine spezielle Konfiguration ist API15. Der EditText wird in einer Fußzeile in einer ListView in einem AlertDialog angezeigt. Die EditText Android - Version: fokussierbarem = „true“ gesetzt ist, und onFocusChangeListener wird empfängt Fokus - Ereignisse.
Bearbeiten:
Wie angefordert, ist hier das spezifische Code-Snippet, mit dem ich arbeite. Ich werde mich nicht um das gesamte Layout kümmern, aber in dieser speziellen Anwendung wird der EditText als Reaktion auf das Drücken einer Schaltfläche im Dialogfeld angezeigt (ähnlich einer Aktionsansicht ). Es ist in einem RelativeLayout enthalten, dessen Sichtbarkeit standardmäßig "weg" ist:
<RelativeLayout
android:id="@+id/relLay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp">
<ImageButton
android:id="@+id/cancelBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="@color/transparent"
android:src="@drawable/cancelButton"
android:layout_margin="5dp"/>
<ImageButton
android:id="@+id/okBut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/cancelBut"
android:background="@color/transparent"
android:src="@drawable/okButton"
android:layout_margin="5dp" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:focusable="true"
android:layout_toLeftOf="@id/okBut"/>
</RelativeLayout>
Der Code, der dies erstellt, setzt die Sichtbarkeit des relativen Layouts auf "Sichtbar" (und verbirgt die anderen UI-Elemente). Dies sollte ausreichen, um die Tastatur hochzuziehen, wenn der EditText fokussiert wird, basierend auf meinen Erfahrungen mit EditText. Aus irgendeinem Grund ist dies jedoch nicht der Fall. Ich kann den folgenden onFocusChangeListener einstellen:
edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// For whatever reason we need to request a soft keyboard.
InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE);
if(hasFocus)
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus."));
}
}
});
Wenn ich in dieser Konfiguration den EditText zum ersten Mal eingebe, wird der onFocusChangedListener ausgelöst und generiert ein Protokoll, das immer so aussieht:
Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.
Die Tastatur wird angezeigt und verschwindet dann, wahrscheinlich weil ich sie zweimal umschalte. Aber selbst wenn ich sicher bin, dass sie aktiv bleibt, befindet sie sich hinter dem Dialogfenster (in einem ausgegrauten Bereich), und es gibt keine Möglichkeit, dorthin zu gelangen, ohne den Dialog zu schließen .
Trotzdem möchte ich betonen, dass ich, obwohl ich diese Problemumgehung möglicherweise zum Laufen bringen kann, in erster Linie daran interessiert bin , einen einfachen Grund zu finden, warum der EditText überhaupt nicht ausgelöst wird und warum dies so ist scheint so alltäglich zu sein!