Я хочу, чтобы обнаружить, когда мягкая клавиатура отображается и скрыта. Для этого я делаю так:Android-клавиатура: onReceiveResult огонь с RESULT_SHOWN после немедленно RESULT_HIDDEN
public class ALEditText extends EditText {
private ALSoftInputListener mSoftInputListener;
private static class SoftInputReceiver extends ResultReceiver {
private static final int RESULT_UNCHANGED_HIDDEN = 1;
private static final int RESULT_SHOWN = 2;
private static final int RESULT_HIDDEN = 3;
private static final int RESULT_UNCHANGED_SHOWN = 0;
private ALSoftInputListener mListener;
public SoftInputReceiver(ALSoftInputListener listener) {
super(null);
this.mListener = listener;
}
public void onReceiveResult(int result, Bundle data) {
switch (result) {
case RESULT_UNCHANGED_SHOWN /*0*/:
case RESULT_SHOWN /*2*/:
if (this.mListener != null) {
this.mListener.onSoftInputShown();
}
case RESULT_UNCHANGED_HIDDEN /*1*/:
case RESULT_HIDDEN /*3*/:
if (this.mListener != null) {
this.mListener.onSoftInputHidden();
}
default:
}
}
}
public void showSoftInput() {
SoftInputReceiver receiver = new SoftInputReceiver(this.mSoftInputListener);
InputMethodManager imm = getInputMethodManager();
imm.showSoftInput(this, 0, receiver);
}
public void HideSoftInput() {
SoftInputReceiver receiver = new SoftInputReceiver(this.mSoftInputListener);
InputMethodManager imm = getInputMethodManager();
imm.hideSoftInputFromWindow(getWindowToken(), 0, receiver);
}
public void SetSoftInputListener(ALSoftInputListener listener) {
this.mSoftInputListener = listener;
}
protected InputMethodManager getInputMethodManager() {
return (InputMethodManager) getContext().getSystemService("input_method");
}
}
, но у меня есть странное поведение, что я не могу понять, когда я делать showSoftInput то виртуальная клавиатура шоу и событие onSoftInputShown также поднят, но это сразу после onSoftInputHidden и клавиатура все еще видна! позже, если я скрою клавиатуру, событие onSoftInputHidden снова не будет вызываться ... может ли кто-нибудь объяснить мне, что происходит?