聊一聊android界面的层次结构
2017-05-25 本文已影响432人
的一幕
其实写这篇文章只是为了更好地理解android界面的结构罢了,同时也是为了更多猿友知道有这么回事。
背景:
之前自己很少关注android界面层次的,因为很少写些第三方的库。最近看了张洪洋的Highlight(一个高亮显示view的库)库,里面涉及到了activity视图布局的代码,因此自己就着手看了下界面的布局层次,这里介绍下sdk中自带的视图工具(uiautomatorviewer),详细见(sdk-->tools--> uiautomatorviewer),这里在用之前需要电脑连上手机,因为该工具会自动获取当前手机显示的界面。
这里给张我的截图,在测试某个界面时获取到的层次结构:
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部分,可见图:
ActionBar说明图.png另外一个就是我们真正显示内容的部分,也就是我们Content,可见图:
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);
这里很好理解嘛,因为Content是decorView的第二个孩子,因此也可以通过decorView获取了。