为Activity设置统一标题栏

作者: 上门女婿联盟 | 来源:发表于2017-02-27 18:00 被阅读769次

       在实际Android App的开发过程当中,有很多场景我们需要拥有一个统一的标题栏,一般情况下,我们习惯使用统一为我们提供名的Toolbar,但是针对不同的Activity,逐一设置不同的ToolBar未免产生代码冗余,而且写起来也很揪心。

       刚开始解决这个问题的时候,我们第一时间会想到在自己的BaseActivity动点手脚,但是不在BaseActivity里面setContentView的话,我们是拿不到toolbar的实例的,而在继承了BaseActivity的其他Activity中,由于setContentView会强制以后者的布局内容为准,所以会把之前的一次调用覆盖掉,依然拿不到toolbar的ID的说,下面提供解决办法,为了便于理解由一个自定义的头部布局来代替ToolBar。

    解决办法:

    1.在BaseActivity中的onCreate方法里面

    注意:是super.setContentView

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

    注意:要给通用的布局一个ID即root_layout

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

    注意:第一个setContentView是BaseActivity的之类调用的,它本身还会调用一下参数为view的重载方法

    这里可以解释下为什么1中是super.setContentView了,因为我们把Activity的本身两个SetContentView方法给覆写掉啦,所以要调用父类的方法然后通过BaseActivity的子类的setContentView(R.id.xxxx)方法来把其他布局添加到rootLayout上

    3.关于initTop

    initTop主要就是头部具体内容的设置方法,我的实现如下:

    initTop具体实现

    initTop可以自由发挥,我是利用两个字段一个type,一个title来控制标题栏,利用type来控制具体按钮的可见性,在利用可见性来控制点击事件,比如这个backButton如果可见的时候统一让它finish掉当前activity,达到回退的目的。

    4.关于type和title字段的设置问题

    我是在BaseActivity中写了一个set函数,像这样️

    set具体实现

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

    注意:setActivityType一定要在setContentView之前调用

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

    相关文章

      网友评论

        本文标题:为Activity设置统一标题栏

        本文链接:https://www.haomeiwen.com/subject/zvozwttx.html