Oryginalne pytanie dotyczy okien dialogowych, a mój tekst EditText jest wyświetlany regularnie. W każdym razie podejrzewam, że to powinno zadziałać także dla większości z was. Oto, co działa dla mnie (wyżej sugerowana metoda najwyżej oceniona nic dla mnie nie zrobiła). Oto niestandardowy EditView, który to robi (podklasowanie nie jest konieczne, ale uznałem, że jest to wygodne dla moich celów, ponieważ chciałem również skupić się, gdy widok staje się widoczny).
W rzeczywistości jest to w dużej mierze to samo, co odpowiedź na pytanie. Właściwie wcale nie zauważyłem jego odpowiedzi, ponieważ miała zero głosów. Potem miałem właśnie skomentować jego post, ale byłoby to zbyt długo, więc i tak przestałem to robić. Tidbeck podkreśla, że nie jest pewien, jak to działa z urządzeniami wyposażonymi w klawiatury. Mogę potwierdzić, że zachowanie wydaje się dokładnie takie samo w obu przypadkach. Jest to spowodowane tym, że w trybie pionowym klawiatura programowa się wysuwa, a w trybie poziomym nie. Wysuwanie się fizycznej klawiatury nie ma znaczenia w moim telefonie.
Bo ja osobiście uważam zachowanie nieco niewygodne Zdecydowałem się przy użyciu: InputMethodManager.SHOW_FORCED
. Działa tak, jak chciałem. Klawiatura staje się widoczna niezależnie od orientacji, jednak przynajmniej na moim urządzeniu nie wyskakuje, jeśli klawiatura sprzętowa została wysunięta.
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();
}
}
}