La pregunta original se refiere a Diálogos y mi EditText está en una vista normal. De todos modos, sospecho que esto debería funcionar para la mayoría de ustedes también. Entonces, esto es lo que funciona para mí (el método de mayor calificación sugerido anteriormente no hizo nada para mí). Aquí hay un EditView personalizado que hace esto (la subclasificación no es necesaria, pero me pareció conveniente para mis propósitos, ya que también quería tomar el foco cuando la vista se hace visible).
En realidad, esto es en gran medida lo mismo que la respuesta tidbecks. De hecho, no noté su respuesta en absoluto, ya que tenía cero votos. Luego estaba a punto de comentar su publicación, pero hubiera sido demasiado tiempo, así que terminé haciendo esta publicación de todos modos. tidbeck señala que no está seguro de cómo funciona con los dispositivos que tienen teclados. Puedo confirmar que el comportamiento parece ser exactamente el mismo en cualquier caso. Dicho esto, en el modo vertical, el teclado del software aparece y en el paisaje no. Tener el teclado físico deslizado o no hace ninguna diferencia en mi teléfono.
Porque, Yo he encontrado el comportamiento un poco extraño que opté por usar: InputMethodManager.SHOW_FORCED
. Esto funciona como quería que funcionara. El teclado se vuelve visible independientemente de la orientación, sin embargo, al menos en mi dispositivo no aparece si el teclado de hardware se ha deslizado hacia afuera.
import android.app.Service;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public class BringOutTheSoftInputOnFocusEditTextView extends EditText {
protected InputMethodManager inputMethodManager;
public BringOutTheSoftInputOnFocusEditTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public BringOutTheSoftInputOnFocusEditTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public BringOutTheSoftInputOnFocusEditTextView(Context context) {
super(context);
init();
}
private void init() {
this.inputMethodManager = (InputMethodManager)getContext().getSystemService(Service.INPUT_METHOD_SERVICE);
this.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
BringOutTheSoftInputOnFocusEditTextView.this.inputMethodManager.showSoftInput(BringOutTheSoftInputOnFocusEditTextView.this, InputMethodManager.SHOW_FORCED);
}
}
});
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if (visibility == View.VISIBLE) {
BringOutTheSoftInputOnFocusEditTextView.this.requestFocus();
}
}
}