Activityのビュー階層とコンテンツルート(View)を取得する

Activityがインフレートするビュー階層は、特にオプションが指定されなければ以下のようになる※

PhoneWindow$Decorviewはポリシ毎に用意されるビューのルートであり

View decor = this.getWindow().getDecorView();

と取得する。
このDecorView下に追加されるLinearLayoutは全てのビューのルートだが、NO_IDのため直接は取得できない。(DecorViewをViewGroupにキャストしてgetChildAt(0)でなら取得できる)その下にはFrameLayoutが2つぶら下がる。

左側に見えるNO_IDのFrameLayoutの下にはタイトルバーとして使用されるTextViewが追加されており、

TextView titleBar = (TextView)this.findViewById(android.R.id.title);

と取得できる。

一方右側に見えるFrameLayoutにはIDが振られており、

ViewGroup contentRoot = (ViewGroup)this.findViewById(android.R.id.content);

と取得できる。
我々が普段作成するレイアウト(layout.xml)はこのcontentRootの下にぶら下がることになっている。

タイトルバー、コンテンツのルート共にSDKが内部的にIDを振っており、直接取得できるというのがミソだ。(将来的な実装で変わる可能性も0とはいえないが)

スマートフォンを前提にしている(Windowクラスがcom.android.internal.policy.impl.PhoneWindow)。MIDP等他のポリシでは保証されない