为Activity设置统一标题栏
在实际Android App的开发过程当中,有很多场景我们需要拥有一个统一的标题栏,一般情况下,我们习惯使用统一为我们提供名的Toolbar,但是针对不同的Activity,逐一设置不同的ToolBar未免产生代码冗余,而且写起来也很揪心。
刚开始解决这个问题的时候,我们第一时间会想到在自己的BaseActivity动点手脚,但是不在BaseActivity里面setContentView的话,我们是拿不到toolbar的实例的,而在继承了BaseActivity的其他Activity中,由于setContentView会强制以后者的布局内容为准,所以会把之前的一次调用覆盖掉,依然拿不到toolbar的ID的说,下面提供解决办法,为了便于理解由一个自定义的头部布局来代替ToolBar。
解决办法:
1.在BaseActivity中的onCreate方法里面

其中base_layout是一个包括头布局的通用布局文件

2.看到rootLayout的字样很多同学估计都明白了,这个Demo的实质就是利用ViewGroup的addView方法来进行布局管理

这里可以解释下为什么1中是super.setContentView了,因为我们把Activity的本身两个SetContentView方法给覆写掉啦,所以要调用父类的方法然后通过BaseActivity的子类的setContentView(R.id.xxxx)方法来把其他布局添加到rootLayout上
3.关于initTop
initTop主要就是头部具体内容的设置方法,我的实现如下:

initTop可以自由发挥,我是利用两个字段一个type,一个title来控制标题栏,利用type来控制具体按钮的可见性,在利用可见性来控制点击事件,比如这个backButton如果可见的时候统一让它finish掉当前activity,达到回退的目的。
4.关于type和title字段的设置问题
我是在BaseActivity中写了一个set函数,像这样️

具体的使用方法,只是多了一句setActivityType,建议在BaseActivity给type和title一个默认值,这样不写也有样式

具体代码见:github地址 觉得有用请给个star或者点个收藏 笔芯