BaseActivity封装固定控件

xiaoxiao2021-02-28  60

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

转载请注明原文地址: https://www.6miu.com/read-55162.html

最新回复(0)