How and why to use Android Visibility Listeners
Android UI はビューで構成されており、通常のアプリケーションでは、通常、複数のビューが存在します。
リスナーが機能するためには、まず、レイアウト階層でビューが見つかることを確認する必要があります。 これが起こる 2 つの方法があります。
- View は、XML ファイルで定義されているので、すでにレイアウトの一部です。
- View を動的に作成し、addView メソッドを使用してそれを追加する必要があります。
View の表示状態は、Integer 型で、3 つのオプションのうちの 1 つを持つことができます。
- VISIBLE (0) – ビューはユーザーに見えています
- INVISIBLE (4) – ビューはユーザーには見えませんが、レイアウト内でスペースを取っています
- GONE (8) – ビューは見えなくなりました。 レイアウト階層の内部では、ビューの可視性が変更されたときに、それを知るのに役立つネイティブ オプションがいくつかあります。
onVisibilityChanged
このメソッドは、ビューまたはビューの祖先の可視性が変更されたときにトリガーされます。 可視性の状態は、visibility パラメータ内で見つかります。
onWindowVisibilityChanged
このメソッドは、ビューの含むウィンドウがその可視性を変更したときにトリガーされます。 これは、View があるウィンドウがユーザーから見えることを保証するものではありません。 TextView とボタンがある LinearLayout を作成します。 ボタンのクリックアクションがカスタムビューをレイアウトに追加するようにします。
カスタム ビュー:
そして最後に MainActivity 内でのコードです。
アプリケーションを実行してボタンを押すと、次のようになります:
サンプル プロジェクトは、ここから取得できます。
ViewTreeObserver
これはネイティブ オブジェクトで、ビュー ツリーへのさまざまな可視性の変更を通知する幅広いリスナーを持っています。 注目すべきいくつかの顕著なものは、
- OnGlobalLayoutListener
- OnWindowAttachListener
- OnWindowFocusChangeListener
ViewTreeObserver を取り付けるために、次のことを行う必要があります。
行
linearLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this)
は、リスナーが 1 回だけ呼ばれることを確認するものです。 もし、変更時にリッスンし続けたい場合は、これを削除してください。