我有一个活动,整个屏幕专门用于发送一条消息。作为上半部分的一个EditText,SoftKeyboard始终在下半部分可见。 当我按下时,SoftKeyboard会隐藏,我必须再次按下才能离开活动。
我努力获得的行为是:当我按下后退按钮而不是隐藏键盘时立即完成活动。 例如,在撰写新推文时,您可以在Twitter应用中找到此行为。
我尝试重写onBackPressed()函数,但看起来当键盘可见时,函数不会被调用。
@Override
public void onBackPressed() {
finish();
}
任何帮助都会非常感激!
答案 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()函数,请在互联网上搜索。