關於Toolbar中navigationIcon和title之間距離及展開
阿新 • • 發佈:2017-07-01
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之間距離及展開