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

本文介绍了一种自定义ActionBar的方法,通过创建ActionHolder类简化布局管理,提高代码复用性和维护性。解决了子类中难以修改及重复findViewById的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         在工作中,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;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值