BaseActivity封装固定控件

最近公司项目调接口,业务比较忙没有时间写东西了,今天新给了一个需求要求在没一个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 大功告成!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值