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等他のポリシでは保証されない