美文网首页
24.0.0 Support 包 中 Toolbar Title

24.0.0 Support 包 中 Toolbar Title

作者: lguipeng | 来源:发表于2016-06-26 09:43 被阅读308次

    问题

    项目 Support 包升级到了 24.0.0,发现 Title 左边有 16dp 的 paddingLeft,如果没有 Nav icon 的情况下这个padding 还是不错的,但是在有 Nav icon 的情况下,Title 就偏得有点多。。(虽然看了下 MD规范中 Toolbar 中 这样是对的,但是设计师还是觉得尽量改下,而且之前的版本这种情况是没有这个padding的,已经看习惯了)

    分析

    第一想法就是看 24.0.0中 Toolbar的源码,找到 mTitleTextView 看下是不是直接设了 paddingLeft

    if (mTitleTextView == null) {    
      final Context context = getContext();    
      mTitleTextView = new TextView(context);       
      mTitleTextView.setSingleLine();  
      mTitleTextView.setEllipsize(TextUtils.TruncateAt.END);    
      if (mTitleTextAppearance != 0) { 
        mTitleTextView.setTextAppearance(context, mTitleTextAppearance);    
      }    
      if (mTitleTextColor != 0) {
        mTitleTextView.setTextColor(mTitleTextColor);   
      }
    }
    

    赤裸裸的没有,然后就去看 mNavButtonView 有没有 paddingRight之类的,也同样没发现。
    于是就觉得应该是 Toolbar layout的时候设置的,于是跑到 onLayout 看下,发现有这样一行

    mTitleTextView.layout(titleLeft, titleTop, titleRight, titleBottom);
    

    于是 追踪这个 titleLeft 变量,这个又是由 left 赋值得到,后来追踪到 getCurrentContentInsetStart()

    public int getCurrentContentInsetStart() {    
      return getNavigationIcon() != null  ? Math.max(getContentInsetStart(), Math.max(mContentInsetStartWithNavigation, 0)) : getContentInsetStart();
    }
    

    我们这种情况下getNavigationIcon 是不为 null 的,于是就是看getContentInsetStart()和 Math.max(mContentInsetStartWithNavigation, 0)那个大了,调试下 就可以知道这两个值分别为 48 (16dp) 216 (72dp),于是我们最后得到 titleLeft就是 72dp了,也就是 56 (nav icon 的大小)+ 16。

    解决之法

    为mContentInsetStartWithNavigation重新设个值就好了啦,看下它的初始化

    mContentInsetStartWithNavigation = a.getDimensionPixelOffset(  R.styleable.Toolbar_contentInsetStartWithNavigation,RtlSpacingHelper.UNDEFINED);
    

    这个属性的默认值就是 72dp ,所以到这里你应该知道怎么改了吧,哈哈
    PS :如果还不知道的话打赏我, 我手把手教你改

    相关文章

      网友评论

          本文标题:24.0.0 Support 包 中 Toolbar Title

          本文链接:https://www.haomeiwen.com/subject/dyiadttx.html