關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM