BaseActivity封装固定控件

来源:互联网 发布:斑马条码打印机软件 编辑:程序博客网 时间:2024/05/29 03:22

最近公司项目调接口,业务比较忙没有时间写东西了,今天新给了一个需求要求在没一个activity中都要有一个floatingactionButton。我就改了之前写的BaseActivity,下面基本说一下我的思路。


1,如何在baseActivity中固定一个控件呢?

  因为我们的控件必须依赖于一个继承自viewGroup的布局存在。所以一开始我的想法是在BaseAcitivity中获取到子activity的布局,然后new出控件加进去,但是事实正面这样是行不同的。

/**     * 创建fab     */    private void setFabm(ViewGroup viewGroup) {        final FloatingActionButton programFab1 = new FloatingActionButton(mContext);        programFab1.setButtonSize(FloatingActionButton.SIZE_MINI);        programFab1.setLabelText("fab");        programFab1.setImageResource(R.mipmap.ic_edit);        contentview.addView(programFab1)        programFab1.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                programFab1.setLabelColors(ContextCompat.getColor(mContext, R.color.grey),                        ContextCompat.getColor(mContext, R.color.light_grey),                        ContextCompat.getColor(mContext, R.color.white_transparent));                programFab1.setLabelTextColor(ContextCompat.getColor(mContext, R.color.black));            }        });    }
会在addview的时候报空指针,是因为contentview没有获取到。

真正正确的做法:

新建一个baseActivity的布局加入需要固定的控件,重写setcontentView

 @Override    public void setContentView(@LayoutRes int layoutResID) {        if ( R.layout.base == layoutResID) {            super.setContentView(R.layout.base);            contentView = (LinearLayout) findViewById(R.id.layout_center);            contentView.removeAllViews();        } else if (layoutResID != R.layout.base) {            View addView = LayoutInflater.from(this).inflate(layoutResID, null);            contentView.addView(addView);        }    }
当传过来的布局文件是我们的base的时候,我们才去实际的设置布局文件
super.setContentView(R.layout.activity_base);,同时获取里面的一个容器ContentView,在我们的子类调用这个方法的时候,我们就通过LayoutInflater去找到这个view,然后加到我们的base里面去,通过这种方式,我们拐弯的达到了继承BaseLayout的效果。
之后我们就可以把一些基础的各种设置ActionBar的工作从各个Activity里面抽出来,放到这个BaseActivity里面去。


ok 大功告成!!!