Оригінальне питання стосується діалогів, і мій EditText регулярно переглядається. Так чи інакше, я підозрюю, що це має працювати і для більшості з вас. Тож ось що для мене працює (вищенаведений запропонований метод найвищої оцінки для мене нічого не робив). Ось користувацький EditView, який робить це (підкласифікація не потрібна, але я вважав це зручним для своїх цілей, оскільки я хотів також захопити фокус, коли вид стає видимим).
Це насправді багато в чому те саме, що і відповіді від тідбека. Я насправді зовсім не помітив його відповіді, оскільки він мав нульовий голос. Тоді я збирався просто прокоментувати його повідомлення, але це було б занадто довго, тому я все-таки закінчився цим дописом. tidbeck вказує, що він не впевнений, як це працює з пристроями, що мають клавіатури. Я можу підтвердити, що поведінка здається абсолютно однаковою в будь-якому випадку. Це так, що в портретному режимі вискакує клавіатура програмного забезпечення, а в пейзажному - не. Якщо фізична клавіатура висунута чи ні, це не має значення для мого телефону.
Тому що, я особисто знайшов поведінку трохи ніяково , я вибрав для використання: InputMethodManager.SHOW_FORCED
. Це працює так, як я хотів, щоб він працював. Клавіатура стає видимою незалежно від орієнтації, однак принаймні на моєму пристрої вона не з’являється, якщо апаратну клавіатуру висунули.
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();
}
}
}