ビューの高さと幅、特にこのスレッドを取得する際に人々が抱えている問題に対するさまざまな質問と回答をたくさん見てきました。
以下は、ビュー ディメンションを取得する方法として言及されています。
- アクティビティの onWindowFocusChanged()
- 使用しているビューのタイプをサブクラス化し、onSizeChanged()、onLayout()、または onMeasure() のいずれかをオーバーライドします
- ViewTreeObserver と addOnGlobalLayoutListener() の使用
それぞれが機能しているように見える場合もあれば、何かが正しく機能しないと言う人もいます。View クラスには setOnDimensionsKnown(OnDimensionsKnown odk) または同様のメソッドがないため、これらのメソッドのどれ (またはおそらく言及されていないメソッド) が、ビューがまだ描画されているかどうかに関係なく、wrap_content またはfill_parent パラメータ、または明示的な高さと幅が px、dp などで設定されていますか?
編集:おそらく特定の例が役立つでしょう。PopupWindow でコンテンツをラップし、幅の値だけ -x 方向にオフセットしようとしています。問題は、コンテンツの幅、つまり popupwindows の幅が、ポップアップを表示するまで測定されないことです。したがって、基本的に、画面に描画される前の幅を測定する良い方法は考えられません。
私の通常のアプローチは、描画する前に寸法が必要なビュー クラスをオーバーライドし、独自の setOnDimensionsKnown(OnDimensionsKnown odk) メソッドを作成し、onMeasure が呼び出される幅と高さの値で起動することです。これは、必要なすべてのケースで機能しますが、これを行うためにすべてのビュー クラスをオーバーライドするのはあまりエレガントではないようです。
例をさらに説明するのに役立つコードを投稿できます。