[Android]Toolbar使用详解(三)——源码解析

更多关于Toolbar的使用请移步Toolbar使用详解系列

从Toolbar的使用一步步解析Toolbar源码

大体架构


API 0.设置导航图标

 mToolbar.setNavigationIcon(R.drawable.ic_actionbar_flow);
源码如下

    public void setNavigationIcon(int resId) {
        this.setNavigationIcon(this.mTintManager.getDrawable(resId));
    }

setNavigationIcon

  public void setNavigationIcon(@Nullable Drawable icon) {
        if(icon != null) {
            this.ensureNavButtonView();
            if(this.mNavButtonView.getParent() == null) {
                this.addSystemView(this.mNavButtonView);
                this.updateChildVisibilityForExpandedActionView(this.mNavButtonView);
            }
        } else if(this.mNavButtonView != null && this.mNavButtonView.getParent() != null) {
            this.removeView(this.mNavButtonView);
        }

        if(this.mNavButtonView != null) {
            this.mNavButtonView.setImageDrawable(icon);
        }

    }

先判断传入图片参数是否为null

  • null,移除导航图片。
  • 不为null,新建一个ImageView,设置其LayoutParams,最后设置ImageView的图片为入参。

ensureNavButtonView

保证导航图片不为null,为null则新建并添加。

    private void ensureNavButtonView() {
        if(this.mNavButtonView == null) {
            this.mNavButtonView = new ImageButton(this.getContext(), (AttributeSet)null, attr.toolbarNavigationButtonStyle);
            Toolbar.LayoutParams lp = this.generateDefaultLayoutParams();
            lp.gravity = 8388611 | this.mButtonGravity & 112;
            this.mNavButtonView.setLayoutParams(lp);
        }

    }
设置导航图标,通过LayoutParams.gravity

lp.gravity=8388611设置gravity=start即左边开始位置

在Toolbar构造函数内对gravity进行了初始化

      this.mButtonGravity = 48;
48:gravity = top

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值