androidDecorView、自定义title
(友情提示这篇文章很多地方是以web开发类比的,木有web开发经验的童鞋看到了表怪我)大多时候我们看到的手机界面是这样的
大致分为3部分
1.含有电池的行,就是status bar 是系统提供的状态栏
2.含通讯录的哪一行,title bar 一般也是系统默认提供给你。
3.剩余的部分,我们在setContentViewd的时候设置的内容就是这一块。
为啥setContentView而不是setRootView,因为我们set的真不是root,整个activity展现给我们的view应该包括界面上看到的所有的控件也就是说包括了statusbar和titlebar,实际上有这么一个root他就是DecorView他是activity的window的根元素结构如下图(本图转自下方参考)
如上图整个window在DecorView里,他的子元素是个linearLayout的view(1),view(1)中包含两个frameLayout(20,21)titlebar在20而我们setContentView的内容在21里面。21这个frameLayout的id就是'content'。
如何自定义title bar呢,例如上图中那个通讯录右边的加好友按钮是怎么定义的呢?
说到这里就有必要解释一下window对象,activity对象和view对象的关系了,我是web出身,直白的讲
activity对应浏览器的一条进程也就是一个新页面进程。
window对应js的window对象
content(setContentView中的content)对应页面的元素标签(DecorView对应)
setContentView的过程实际上就是
activity.getWindow().setContentView(LayoutInflater.from(this).inflate(R.layout.main,null))
以此类推,摆在我们面前的问题是我们现在没有直接对应标题的标签我们如何操作?
我们可以通过window对象来完成,如下,在onCreate的时候
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);//通知window用户要自定义不用默认的了
setContentView(R.layout.main);//设置我们的布局
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title);//定义title的xml
setContentView(R.layout.main);//设置我们的布局
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title);//定义title的xml
参考:
http://www.cnblogs.com/beenupper/archive/2012/07/13/2589749.HTML
http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html
http://blog.csdn.net/windskier/article/details/6957854
http://www.cnblogs.com/loulijun/archive/2012/02/09/2344681.html