XML で定義された ViewGroup について話している場合、その子はビューが膨張したときに追加されます。これは、 で明示的にインフレートする場合、LayoutInflater
またはアクティビティのコンテンツ ビューを設定する場合です。(特にスタブ ビューを使用している場合は、他にもいくつかの場合があります。)
インフレートされていない に自分で子を追加したい場合ViewGroup
は、ビューのコンストラクターでそれを行うことができます。
編集:ビューが膨張したときに子がどのように追加されるかを確認したい場合、これは への呼び出しで発生しますLayoutInflater.inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)
。のソースandroid.view.LayoutInflater
は Android SDK ディストリビューションに含まれています。オンライン バージョンは、多くの場所で見つけることができます (たとえば、ここでは GrepCode )。このメソッドは、たとえば、 を呼び出すときsetContentView(int)
、Activity
またはレイアウト リソースを明示的に膨張させるときに呼び出されます。
子は実際にはrInflate(parser, root, attrs, false);
("recursive inflate")の呼び出しに追加されます。これはinflate()
、インフレータがルート タグとして見つけたものに応じて、メソッド内のいくつかの異なる場所から呼び出される可能性があります。コード ロジックを自分でトレースできます。興味深い点は、子が親に追加されるのは、それ自身の子が再帰的に膨らませられて親に追加されるまでです。
inflate
と の両方で使用されるもう 1 つの興味深い方法はrInflate
、 ですcreateViewFromTag
。LayoutInflater.Factory
これは、インストール可能(または.Factory2
オブジェクト) に依存してビューを作成するか、最終的に を呼び出す可能性がありcreateView
ます。そこでは、ビューの 2 つの引数のコンストラクター ( ) の呼び出しがどのように行われるかを確認できます(Context context, AttributeSet attrs)
。