码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-01 01:02:55      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:方法   不能   自身   alignment   change   ldl   content   too   final   

关于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之间距离及展开

标签:方法   不能   自身   alignment   change   ldl   content   too   final   

原文地址:http://www.cnblogs.com/squallmoon/p/7100993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!