onBackPressed()
не будет вызвана, когда клавиатура и закрывается. Не знаю точной причины, но это факт.
Однако, если вам нужно захватить событие назад, когда отображается клавиатура, вы можете прослушивать изменения в видимости макета корневого/родительского макета.
Подтвердив @ReubenScratton, который дал отличную answer, чтобы преодолеть эту проблему, мы имеем следующий код:
final View activityRootView = findViewById(R.id.activityRoot);
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > dpToPx(this, 200)) { // if more than 200 dp, it's probably a keyboard...
// ... do something here
}
}
});
и dpToPx
функции:
public static float dpToPx(Context context, float valueInDp) {
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
}
родственный: http://stackoverflow.com/questions/ 3940127/intercept-back-button-from-soft-keyboard –
проверьте это. он решил ту же проблему, у меня было [https://stackoverflow.com/a/36259261/5130987](https://stackoverflow.com/a/36259261/5130987) –