A pergunta original diz respeito às caixas de diálogo e meu EditText está em uma exibição regular. De qualquer forma, suspeito que isso funcione também para a maioria de vocês. Então, aqui está o que funciona para mim (o método de classificação mais alta sugerido acima não fez nada para mim). Aqui está um EditView personalizado que faz isso (a subclasse não é necessária, mas achei conveniente para meus propósitos, pois eu também queria focar quando a exibição se tornar visível).
Na verdade, é praticamente o mesmo que a resposta dos boatos. Na verdade, eu não percebi a resposta dele, pois tinha zero votos positivos. Então eu estava prestes a comentar o post dele, mas teria sido muito longo, então acabei fazendo esse post de qualquer maneira. tidbeck ressalta que não tem certeza de como isso funciona com dispositivos com teclados. Posso confirmar que o comportamento parece ser exatamente o mesmo em ambos os casos. Sendo assim, no modo retrato, o teclado do software aparece e, na paisagem, não. Ter o teclado físico deslizado para fora ou não, não faz diferença no meu telefone.
Porque, I pessoalmente o comportamento um pouco estranho optei por usar: InputMethodManager.SHOW_FORCED
. Isso funciona como eu queria que funcionasse. O teclado fica visível independentemente da orientação; no entanto, pelo menos no meu dispositivo, ele não aparece se o teclado do hardware tiver sido deslizado para fora.
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();
}
}
}