Android activity的DecorView的层次结构

1. Activity中View布局的最祖宗布局,是一个FrameLayout,叫做DecorView,通过getWindow().getDecorView()可以获取到;

2. DecorView的子布局有且仅一个,是一个LinearLayout;

3. 这个LinearLayout里边有两个(如果使用一些老的Theme比如android/theme.light,会有三个,因为没啥用所以没研究)子布局,第一个是个ViewStub,第二个是个FrameLayout;

4. 其中ViewStub就是ActionBar,他会根据theme判断有没有使用ActionBar来决定是否引入真实ActionBar的布局;

5. 而这第二个FrameLayout,就是我们应用中真实使用布局的父布局,如果我们的Activity直接继承android.app.Activity,那么这个FrameLayout的子布局就是我们使用的xml布局了; 但是如果继承AppComcatActivity,这个FrameLayout里边会有两个子布局,这两个都是AppCompatActivity再次包装的,然后第一个布局再里边的子布局才是我们应用使用的布局,至于再次包装的这两个布局是啥就不说了,没啥大用;


6 用处 : 因为DecorView是个FrameLayut,所以获取到他之后可以使用addView方法,给activity布局上层再添加一层或n层布局,可以做一些动画效果,悬浮菜单和按钮等(比如加入购物车的那个商品图片一跳的动画效果); 而DecorView的子布局是个LinearLayout,也可以使用addview方法,比如在ActionBar的上头添加一个布局,可以使用addView(mView,0)的方法,这样我们自己的布局就骑到ActionBar的上边了;等等.....

你可能感兴趣的:(android)