如何使用onBackPressed()显示()SoftKeyboard可见的活动

时间:2015-11-12 13:34:33

标签: java android android-activity

我有一个活动,整个屏幕专门用于发送一条消息。作为上半部分的一个EditText,SoftKeyboard始终在下半部分可见。 当我按下时,SoftKeyboard会隐藏,我必须再次按下才能离开活动。

我努力获得的行为是:当我按下后退按钮而不是隐藏键盘时立即完成活动。 例如,在撰写新推文时,您可以在Twitter应用中找到此行为。

我尝试重写onBackPressed()函数,但看起来当键盘可见时,函数不会被调用。

@Override
public void onBackPressed() {
     finish();
}

任何帮助都会非常感激!

5 个答案:

答案 0 :(得分:2)

所以在尝试了许多事情之后,这里有一些有用的东西:

Subclass EditText并覆盖onKeyPreIme()函数以发送回调。 这是子类的代码:

OnKeyPreImeListener onKeyPreImeListener;

public void setOnKeyPreImeListener(OnKeyPreImeListener onKeyPreImeListener) {
    this.onKeyPreImeListener = onKeyPreImeListener;
}

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
        if(onKeyPreImeListener != null)
            onKeyPreImeListener.onBackPressed();
        Log.d(TAG, "HIDING KEYBOARD");
        return false;
    }
    return super.dispatchKeyEvent(event);
}

public interface OnKeyPreImeListener {
    void onBackPressed();
}

然后在您的每个TextView的活动中:

EditTextGraphee.OnKeyPreImeListener onKeyPreImeListener = 
        new EditTextGraphee.OnKeyPreImeListener() {
        @Override
        public void onBackPressed() {
            Log.d(TAG, "CALL BACK RECEIVED");
            MyActivity.this.onBackPressed();
        }
    };
editText.setOnKeyPreImeListener(onKeyPreImeListener);

答案 1 :(得分:1)

新答案:

显然你没有收到onBackPressed回调,但这并不意味着你无法检测到键盘关闭。

使用此处描述的技术:How to check visibility of software keyboard in Android?

您可以检测键盘打开/关闭的时间,因此当键盘关闭时,您可以拨打finish();

已弃用,原始回答:

只需覆盖活动中的反压事件:

@Override
public void onBackPressed() {
   super.onBackPressed();
   finish();
}

答案 2 :(得分:1)

我认为由于软键盘可见,因此edittext可能具有焦点。因此,您可以通过在EditText上添加OnEditorActionListener并完成活动来捕获后退事件。

yourEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

                if (event.getAction() == KeyEvent.ACTION_UP){

                    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
                        finish();
                    }

                }
                return false;

            }
        });

答案 3 :(得分:0)

您需要扩展EdtText类并实现onKeyPreIme方法。

tableView

}

答案 4 :(得分:-1)

像这样覆盖onBackPressed()方法:

 @Override
public void onBackPressed() {
   hideKeyboard();
   finish();
}

对于hideKeyboard()函数,请在互联网上搜索。