這個問題可以具體為getmeasuredheight()
和getheight()
有什麼區別。
view
public
final
intgetheight()
再看看 mbottom 、mtop 是怎麼來的:
view
protected
boolean
setframe(int left, int top, int right, int bottom)
接著看 setframe 在哪呼叫的:
view
public
void
layout(int l, int t, int r, int b)
接著看 layout 在哪呼叫的,首先肯定是父容器確定子元素位置的時候呼叫的該方法,由於 layout 是view確定自身的位置,onlayout 是確定子元素的位置,因此應該在父容器的 onlayout 中呼叫的子元素的 layout,拿 linearlayout 舉例來說:
linearlayout
protected
void
onlayout(boolean changed, int l, int t, int r, int b) else
}
接著看layoutvertical(l, t, r, b)
,水平方向和豎直方向的類似。
linearlayout
void layoutvertical(int left, int top, int right, int bottom)
接著看setchildframe
:
linearlayout
private
void
setchildframe(view child, int left, int top, int width, int height)
public
void
layout(int l, int t, int r, int b)
如果按照上面這樣重寫,那麼getheight()
得到的值會比getmeasuredheight()
大100。
注意:在某些情況下,view 需要多次 measure 才能確定自己的測量寬高,再前幾次的測量過程中,得出的測量寬高有可能和最終寬高不一致,但是到了最後,測量寬高和最終寬高還是相同的,除非有意重寫 layout() 修改。
注意
雖說在 layout 階段確定 view 的最終寬高,但是在 onlayout 中呼叫子 view 的getwidth()
經常取不到寬高值,除非子 view 的位置已經確定
獲取view寬高
在oncreate 中利用view.getwidth 或是view.getheiht 來獲取view的寬和高,看似沒有問題,其實他們去得值是0,並不是你想要的結果?這是為什麼呢?在呼叫oncreate 方法時,介面處於不可見狀態,記憶體載入元件還沒有繪製出來,你是無法獲取他的尺寸。那如何在繪製元件之...
android測量文字的寬高
獲取文字高度 1.基準線是baseline 2.ascent 字型在baseline上方被推薦的距離 一些字型製作商需要參考這個 3.descent 字型在是baseline下方被推薦的距離 一些字型製作商需要參考這個 4.top ascent的最大值 5.bottom descent的最大值 四個...
css已知寬高和未知寬高的居中定位
1 已知寬高 上圖中我們想要對已知寬度的 服務範圍 進行左右居中定位,我們可以先選擇left或者right樣式,這裡我們選擇的是left,這裡的50 指的是這個盒子的最左側位於水平的百分之五十的地方,也就是中間位置,因為我們知道整體的寬度,所以我們可以直接採用在向左移動寬度的一半,也就是margin...