Androidではソフトキーボードの表示、非表示イベントは用意されていないため、独自で実装する必要がある。
・stackoverflowにいい方法があったので紹介
(真ん中あたり、一番上の回答では出来ないみたい)
WebView上でキーボード表示時に利用しています。
・interfaceの宣言
public interface OnKeyboardVisibilityListener { void onVisibilityChanged(boolean visible); }
・表示/非表示の監視
private void setKeyboardVisibilityListener(final OnKeyboardVisibilityListener onKeyboardVisibilityListener) { final View parentView = ((ViewGroup)currentView.findViewById(R.id.webview));//.getChildAt(0); parentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { private boolean alreadyOpen; private final int defaultKeyboardHeightDP = 100; private final int EstimatedKeyboardDP = defaultKeyboardHeightDP + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? 48 : 0); private final Rect rect = new Rect(); @Override public void onGlobalLayout() { int estimatedKeyboardHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, EstimatedKeyboardDP, parentView.getResources().getDisplayMetrics()); parentView.getWindowVisibleDisplayFrame(rect); int heightDiff = parentView.getRootView().getHeight() - (rect.bottom - rect.top); boolean isShown = heightDiff >= estimatedKeyboardHeight; if (isShown == alreadyOpen) { Log.i("Keyboard state", "Ignoring global layout change..."); return; } alreadyOpen = isShown; onKeyboardVisibilityListener.onVisibilityChanged(isShown); } }); }
final View parentView = ((ViewGroup)currentView.findViewById(R.id.webview));//.getChildAt(0);
※ この部分は自分にあったViewにする必要がある
・使い方
setKeyboardVisibilityListener(new OnKeyboardVisibilityListener() { @Override public void onVisibilityChanged(boolean visible) { Log.i("Keyboard state", visible ? "Keyboard is active" : "Keyboard is Inactive"); } });
表示/非表示でイベントが発生してます。
いい回答が埋もれているのは勿体無い気がします。