自定义ActionBar,在BaseActivity如何降低耦合

来源:互联网 发布:Ubuntu 安装 login 编辑:程序博客网 时间:2024/05/17 04:26

         在工作中,ActionBar使用非常频繁,虽然系统的ActionBar、ToolBar给我们提供了很棒的UI体验。但是,我们平常的项目中并不需要这么酷炫的ActionBar。通常来说,一个ActionBar包括 

         左边图片, 左边文字, 标题 ,右边文字,右边图标。

         以上5点,基本满足了80%的ActionBar需求。

        一般我们将实现的过程写在BaseActivity中,但有几个不方便的点:

      1、子类中不方便修改,除非声明全局变量,但这会给代码带来严重的碎片化,致使不好管理;

              2、如果不声明全局变量,则需要重新findViewById一次,才能对ActionBar重新操作,使得代码可读性、维护性太差;

       那有什么办法可以兼容这两种情况呢?

        有,那就是,声明一个整体的全局变量:ActionViewHolder。

        

ActionHolder代码:

       

/** * Created by yanjunhui * on 2016/8/17. * email:303767416@qq.com */public class ActionHolder {    View layLeft;    View layRight;    public TextView tvTitle;    public TextView tvLeft;    public TextView tvRight;    public View iconLeft;    public View iconRight;}

     BaseActivity代码:

/** * Created by yanjunhui * on 2016/8/15. * email:303767416@qq.com */public abstract class BaseActivity extends AppCompatActivity {    private ActionHolder actionHolder;    @Override    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);        MyApplication.getInstance().addActivity(this);    }    @Override    protected void onDestroy() {        super.onDestroy();    }    /**     * 构建自己的ActionBar     */    protected void buildActionBar(String strTitle, int resIdLeft, String strLeft, int resIdRight, String strRight, final ActionBarClickListener listener) {        actionHolder = new ActionHolder();        actionHolder.tvTitle = (TextView) findViewById(R.id.tv_actionbar_title);        actionHolder.tvLeft = (TextView) findViewById(R.id.tv_actionbar_left);        actionHolder.tvRight = (TextView) findViewById(R.id.tv_actionbar_right);        actionHolder.iconLeft = findViewById(R.id.v_actionbar_left);        actionHolder.iconRight = findViewById(R.id.v_actionbar_right);        if (!TextUtils.isEmpty(strTitle)) {            actionHolder.tvTitle.setText(strTitle);        }        if (!TextUtils.isEmpty(strLeft)) {            actionHolder.tvLeft.setText(strLeft);            actionHolder.tvLeft.setVisibility(View.VISIBLE);        } else {            actionHolder.tvLeft.setVisibility(View.GONE);        }        if (!TextUtils.isEmpty(strRight)) {            actionHolder.tvRight.setText(strRight);            actionHolder.tvRight.setVisibility(View.VISIBLE);        } else {            actionHolder.tvRight.setVisibility(View.GONE);        }        if (resIdLeft == 0) {            actionHolder.iconLeft.setVisibility(View.GONE);        } else {            actionHolder.iconLeft.setBackgroundResource(resIdLeft);            actionHolder.iconLeft.setVisibility(View.VISIBLE);        }        if (resIdRight == 0) {            actionHolder.iconRight.setVisibility(View.GONE);        } else {            actionHolder.iconRight.setBackgroundResource(resIdRight);            actionHolder.iconRight.setVisibility(View.VISIBLE);        }        if (listener != null) {            actionHolder.layLeft = findViewById(R.id.lay_actionbar_left);            actionHolder.layRight = findViewById(R.id.lay_actionbar_right);            actionHolder.layLeft.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    listener.onLeftClick();                }            });            actionHolder.layRight.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    listener.onRightClick();                }            });        }    }    /**     * 获得自己的ActionBar     *     * @return     */    public ActionHolder getActionHolder() {        return actionHolder;    }


0 0
原创粉丝点击