聊一聊android界面的层次结构

其实写这篇文章只是为了更好地理解android界面的结构罢了,同时也是为了更多猿友知道有这么回事。

背景:

之前自己很少关注android界面层次的,因为很少写些第三方的库。最近看了张洪洋的Highlight(一个高亮显示view的库)库,里面涉及到了activity视图布局的代码,因此自己就着手看了下界面的布局层次,这里介绍下sdk中自带的视图工具(uiautomatorviewer),详细见(sdk-->tools--> uiautomatorviewer),这里在用之前需要电脑连上手机,因为该工具会自动获取当前手机显示的界面。

这里给张我的截图,在测试某个界面时获取到的层次结构:

聊一聊android界面的层次结构_第1张图片
DecorView说明图.png

这里的ViewGroup就是系统为我们生成的view,id是 decor_content_parent
在代码中获取该view的方式可以是:

     View  decorView = ((Activity) context).getWindow().getDecorView();

其实这里获取到的view是我们在PhoneWindow类中可以见到的,是PhoneWindow里面的一个内部类DecorView,这里就不赘述DecorView内部都做了些啥,详细去** PhoneWindow类中看 DecorView**

该view下面涵盖了两个FramLayout,一个是我们常用的actionBar部分,可见图:

聊一聊android界面的层次结构_第2张图片
ActionBar说明图.png

另外一个就是我们真正显示内容的部分,也就是我们Content,可见图:

聊一聊android界面的层次结构_第3张图片
Content说明图.png

其实我们最多关心的还是Content了,因为我们经常需要动态往Content中添加布局了,所以第一步肯定是需要获取Content了,获取Content经常有如下方式:
activity中直接获取:

View content=findViewById(android.R.id.content)

也可以通过上面介绍的DecorView来获取:

View  decorView = ((Activity) context).getWindow().getDecorView();
View content=((ViewGroup)decorView).findViewById(android.R.id.content);

这里很好理解嘛,因为ContentdecorView的第二个孩子,因此也可以通过decorView获取了。

你可能感兴趣的:(聊一聊android界面的层次结构)