关于Toolbar中navigationIcon和title之间距离及展开
问题缘起
在进行Coolcode项目的MyclassActivity中,我发现navigationIcon和title之间的实际间距与
UI图不符,虽然康桐说不需要改,但是出于好奇心我还是希望明白其中原因。
问题分析
由于学习Android时间不长,无法一步直指问题所在,所以我们就从和Toolbar有关的所有代码里面
一个个找(在myclasses里面)。首先我们在MyClassActivity中首次调用了BaseActivity中的initBackToolbar(Toolbar
toolbar, @StringRes int title, @DrawableRes int navigationIcon)方法
显然这个方法并没有对距离有任何修改。
那么我们在来看这个BaseActivity中的方法,它给Toolbar设置了title和navigationIcon
但是并不能看到其中有对之间的距离有做相应修改,我们翻看其他myclasses下的类,也并没有发现。那么,问题看来只能是出现在Toolbar中了,那么来看一下Toolbar代码。
好长!相信没有完整的时间和计划大家是不会想好好看完这段代码的。那么我们直接来看里面
最重要的控制输出的代码onLayout(boolean changed, int l, int r, int b)final int paddingLeft = getPaddingLeft(); //首先是获取系统的偏移量 int left = paddingLeft; //这段代码用来计算Navigation的Layout if (shouldLayout(mNavButtonView)) { if (isRtl) { right = layoutChildRight(mNavButtonView, right, collapsingMargins, alignmentHeight); } else { //计算完之后left的距离为paddingLeft+mNavButtonView的宽度+mNavButtonView 自身的偏移量 left = layoutChildLeft(mNavButtonView, left, collapsingMargins, alignmentHeight); } } //核心的方法,返回就是那个让距离错误的值 final int contentInsetLeft = getCurrentContentInsetLeft(); //left会从之前的left值也就是计算过Navigation的距离之后 和contentInsetLeft比较,取最大值 left = Math.max(left, contentInsetLeft);
...接下来计算Title的布局的时候左边距就是用的这个left
时间: 2024-10-13 07:08:47