Android--自訂ViewGroup()

來源:互聯網
上載者:User

標籤:

 Measure的本質是:把試圖布局時的相對值轉化為具體值。
 MeasureSpec類封裝了從parent傳遞下來的布局要求,每一個MeasureSpec代表了對寬度和高度的一個要求。

 

為什麼布局需要父視圖與子視圖共同決定? 為什麼不直接設定寬和高?  如果不這樣就像HTML那樣指定固定大小,這樣會造成一個過大把另外一個擠出去。因為HTML是具有整個頁面的控制權。  而Android是拆分開的,這樣做保證了最末端的(介面開發)影響其他層級的布局,需要按照(控制項開發)的規則來。view.setWidth, view.setHeight ? 不是
需要通過measureChilde(view, width, height), 或者childView.measure();

View.getWidth(), View.getHight()
View.getMeasureWidth(), View.getMeasureHiegh()
 一個未添加到視圖中的? 但是有時getMesureHeight 依然是返回0。為什嗎?ec是一個android.view.View的內部類,封裝了從父類傳送到子類的布局要求資訊。

 

 

ViewGroup提供的measure方法

measureChildren() - 該函數內使用for()迴圈調用measureChild()對每一個子視圖進行measure操作measureChild() - 為每一個子視圖進行measure操作measureChildWidthMargins() - 該函數與measureChild的唯一區別在於,measure時考慮把margin及padding也作為子視圖大小的一部分

 

有一個約定:在覆寫onMeasure方法的時候,必須調用 setMeasuredDimension(int,int)來儲存這個View經過測量得到的measured width and height。如果沒有這樣做。將會由measure(int, int)方法拋出一個IllegalStateException。

 

measure(int widthMeasureSpec, int heightMeasureSpec),由於圖片都是正方形,所以寬和高的值是一樣的。

覆寫onMeasure方法的時候,子類有責任確保measured height width至少為這個View的最小height和width。

setMeasuredDimension(resWidth, resHeight);

根據設定的圖的尺寸,擷取此控制項的最小可用值(如果設定了android:minwidth)

如果沒有背景圖,那麼取預設的尺寸,預設其實就是螢幕寬和高中的小值

 

Android--自訂ViewGroup()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.