关于Toolbar中navigationIcon和title之间距离及展开

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Toolbar中navigationIcon和title之间距离及展开相关的知识,希望对你有一定的参考价值。

关于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

以上是关于关于Toolbar中navigationIcon和title之间距离及展开的主要内容,如果未能解决你的问题,请参考以下文章

控件Toolbar

toolbar的相关知识

原生toolbar基本使用教程

怎样调整toolbar中setNavigationIcon的图标大小

Android 关于Toolbar和FragmentActivity的问题

关于ToolBar+DrawerLayout的小结