1. 程式人生 > >關於Toolbar中navigationIcon和title之間距離及展開

關於Toolbar中navigationIcon和title之間距離及展開

boolean ionic code sin block max change nav 希望

關於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之間距離及展開