ViewGroup に基づいてカスタム レイアウトを作成することを検討してきましたが、(私が思うに) レイアウトの基になっている概念を理解しています。とにかく、それのいくつか。
どうやら基本的な考え方は
- 最初に、すべての子ビューにどのくらいの大きさにしたいかを尋ねます - onMeasure() で
- それに基づいてレイアウトを計算する
- onLayout() で、希望のサイズに基づいてすべてを配置します
Web ページのレイアウトに少し似ていると思います。
しかし、私はそれをまったくしたくありません。使用可能な画面の領域 (x/y px) に基づいて、子ビュー (さまざまなテキスト、ボタン、フリーフォーム グラフィックス) が大量にあり、それらのサイズを定義し、テキスト サイズを設定してから配置する必要があります。つまり、私は彼らがどのくらい大きくなりたいかということにはほとんど興味がありません。
似たようなことをする AbsoluteLayout があります (ありました) が、減価償却されています。
レイアウトは子 (ジョブの完全に固定された数) と画面サイズに完全に結び付けられているため、次のことを提案しています。
- 独自のカスタム レイアウト サブクラスの ViewGroup を作成する
- どこか早い段階で - おそらくその onCreate() で? -すべての子を作成します(何が必要かを正確に知っています)
- onMeasure() では、子が必要とするすべてを無視しますが、 setMeasuredDimension() がどこでも呼び出されることを確認して例外を回避するために measureChild() を呼び出し、渡された寸法に基づいてレイアウト (サイズ、位置) を計算する必要があると思われますwidth/heightMeasureSpecs
- onLayout() では、すべての子供たちに、それがどうなるかを伝えます (「あなたはここにいて、これほど大きい」)
- 私は子供たちがサイズ的に何を望んでいるのかには興味がないので、layoutRequest() コールバックを吸収して何もしません
ただし、これは概念的には、Android がレイアウトを行うべきだと考える方法に反しているように見えますが、それは私が必要としているものです。
だから私の質問は - それは実行可能なスキームですか?