问题
项目 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 :如果还不知道的话打赏我, 我手把手教你改
网友评论