Ie

Androidのキーボードリスナーイベント



Keyboard Listener Event Android



実際、ソースコードは比較的単純で、合計6つのクラスがあるため、読んで確認できることをお勧めします。そうすれば、ソースコードはおそらく次のことを実行します。
1、キーボードが開いているかどうかを計算します
2、キーボードイベントコールバック
3、アクティビティが破棄されると、キーボードイベントが破棄されます
4、一般的に使用されるキーボードの表示/非表示操作もあります

わかりました。ソースコードがおそらく何をしているのかはわかっています。ソースコードを1つずつ見ていきます。



キーボードが開いているかどうかを計算します

計算はにあります KeyboardVisibilityEvent クラス[registerEventListener]メソッドでは、コードは次のとおりです。

final ViewTreeObserver.OnGlobalLayoutListener layoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { private final Rect r = new Rect() private final int visibleThreshold = Math.round( UIUtil.convertDpToPx(activity, KEYBOARD_VISIBLE_THRESHOLD_DP)) private boolean wasOpened = false @Override public void onGlobalLayout() { activityRoot.getWindowVisibleDisplayFrame(r) Int heightDiff = activityRoot.getRootView().getHeight() - r.height() // Get the height of the keyboard, but include the status bar 2017/4/12 15:40 boolean isOpen = heightDiff > visibleThreshold if (isOpen == wasOpened) { // keyboard state has not changed return } wasOpened = isOpen listener.onVisibilityChanged(isOpen) } }

1、activityRoot.getWindowVisibleDisplayFrame(r)//現在表示されている長方形を取得します
2、r.height()//プログラムによって表示される領域を取得します。これには、タイトルバーは含まれますが、ステータスバーは含まれません。
3、activityRoot.getRootView()。getHeight()//ステータスバーが含まれます。フルスクリーンを設定した場合、高さはr.height()と同じになります。
4、int heightDiff = activityRoot.getRootView()。getHeight()-r.height()//キーボードの高さを取得しますが、ステータスバーを含めます
5、[intvisibleThreshold = Math.round(
UIUtil.convertDpToPx(activity、KEYBOARD_VISIBLE_THRESHOLD_DP))]、標準の高さを設定するだけです。 heightDiff値が標準よりも大きい場合、キーボードはすでに開いています。標準の高さは、ジョイント調整で得られたおおよその結果であると推定します。



キーボードイベントコールバック

キーボードイベントコールバッククラスは KeyboardVisibilityEventListener インターフェース。

沿って ViewTreeObserver.OnGlobalLayoutListener ビューツリーは、計算されたキーボードの状態を取得した後、通過します ViewTreeObserver.OnGlobalLayoutListener コールバックイベント。

アクティビティが破棄されると、キーボードイベントが破棄されます。

ここで使用される重要な方法があります。 application.registerActivityLifecycleCallbacks()



registerActivityLifecycleCallbacksは何をしますか?実際、その主な機能は、このインターフェイスが、開発者がアクティビティのライフサイクルイベントに集中するための一連のコールバックメソッドを提供することです。

次に、このメカニズムを理解すると、すべてが簡単になります。ソースコードを見ることができます AutoActivityLifecycleCallback 実装するクラス Application.ActivityLifecycleCallbacks インターフェイスは抽象的なメソッドを追加します onTargetActivityDestroyed() 組み合わせ onActivityDestroyed() このメソッドは、アクティビティが破棄されると、キーボードリスニングイベントも破棄される可能性があることを認識できます。

一般的なキーボードの表示/非表示操作

一般的な操作は UIUtil このクラスでは、表示や非表示などの方法がいくつかあるので、ここではあまり説明しません。

わかりました、このキーボードリスニングイベントのライブラリはここで共有されています~~~

お役に立てれば幸いです〜