检测用户何时解除软键盘

在我看来,我有一个EditText小部件。 当用户选择EditText小部件时,我会显示一些说明并出现软键盘。

我使用一个OnEditorActionListener来检测用户何时完成文本输入,然后关闭键盘,隐藏指令并执行一些操作。

我的问题是当用户按BACK键关闭键盘时。 操作系统关闭了键盘,但我的指令(我需要隐藏)仍然可见。

我已经尝试覆盖OnKeyDown,但是当使用BACK按钮关闭键盘时,这似乎不会被调用。

我试过在EditText小部件上设置一个OnKeyListener,但似乎并没有被调用。

如何检测软键盘何时被解除?


这个问题(没有答案,看起来严峻)似乎是问同样的问题:如何检查Android软件键盘的可见性?


我知道一种方法来做到这一点。 子类EditText并实现:

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
  if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
    // Do your thing.
    return true;  // So it is not propagated.
  }
  return super.dispatchKeyEvent(event);
}

以下是如何使用自定义视图的链接(适用于子类EditText时):http://developer.android.com/guide/topics/ui/custom-components.html


杰,你的解决方案很好! 谢谢 :)

public class EditTextBackEvent extends EditText {

    private EditTextImeBackListener mOnImeBack;

    public EditTextBackEvent(Context context) {
        super(context);
    }

    public EditTextBackEvent(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextBackEvent(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && 
            event.getAction() == KeyEvent.ACTION_UP) {
            if (mOnImeBack != null) 
                mOnImeBack.onImeBack(this, this.getText().toString());
        }
        return super.dispatchKeyEvent(event);
    }

    public void setOnEditTextImeBackListener(EditTextImeBackListener listener) {
        mOnImeBack = listener;
    }

}

public interface EditTextImeBackListener {
    public abstract void onImeBack(EditTextBackEvent ctrl, String text);
}
链接地址: http://www.djcxy.com/p/92981.html

上一篇: Detecting when user has dismissed the soft keyboard

下一篇: Prevent soft keyboard from being dismissed