Entonces tengo lo que parece ser un problema común, que es que EditText en mi cuadro de diálogo no aparece cuando se enfoca. He visto varias soluciones alternativas, como en este hilo , este y este (y muchos más), pero nunca he visto una explicación satisfactoria de por qué está sucediendo esto en primer lugar.
Preferiría que Android use su propio comportamiento predeterminado para EditTexts que para construir el mío, pero parece que todos (en esos hilos) han aceptado que el comportamiento predeterminado para EditTexts en Dialogs es simplemente dar un cursor y no un teclado. ¿Por qué sería eso?
Para que conste, ninguna de estas soluciones parece funcionar para mí; lo más cerca que he podido llegar es forzar que aparezca un teclado debajo del cuadro de diálogo (usando InputMethodManager.toggleSoftKeyboard (*)). Mi configuración particular es API15, EditText aparece en un pie de página en un ListView dentro de un AlertDialog. El Android EditText: focusable = "true" está configurado y onFocusChangeListener está recibiendo eventos de enfoque.
Editar:
Según lo solicitado, aquí está el fragmento de código específico con el que estoy trabajando. No me molestaré con el diseño completo, pero en esta aplicación específica, EditText aparece en respuesta a presionar un botón en el diálogo (similar a una vista de acción ). Está contenido en un RelativeLayout que, por defecto, tiene visibilidad "desaparecida":
<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>
El código que crea esto establece la visibilidad del relativo diseño en "Visible" (y oculta los otros elementos de la interfaz de usuario). Esto debería ser suficiente para levantar el teclado cuando EditText se enfoca, según mi experiencia con EditText. Sin embargo, por alguna razón, este no es el caso. Puedo configurar el siguiente onFocusChangeListener:
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."));
}
}
});
Usando esta configuración, cuando entro por primera vez el EditText, el onFocusChangedListener se activa y genera un registro que invariablemente se ve así:
Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.
El teclado aparece y luego desaparece, probablemente porque lo alterno dos veces, pero incluso cuando me aseguro de que permanece arriba, está detrás de la ventana de diálogo (en un área atenuada), y no hay forma de acceder a él sin cerrar el diálogo. .
Dicho esto, me gustaría hacer hincapié en que a pesar de que puede ser capaz de conseguir este trabajo en torno al trabajo, estoy principalmente interesado en la búsqueda de una simple razón por qué la EditarTexto no está activando en primer lugar, y por qué esto parece ser tan común!