這些天我正在學習如何自定義Android上的視圖。我知道如果我們設置最小寬度,那麼系統會比較我們設置的最小寬度和測量的寬度,並選擇適當的視圖。令人困惑的是,android系統如何根據視圖的內容改變視圖的大小,如「wrap_content」的意思。我想知道更多關於如何實現「wrap_content」的細節。非常感謝。Android如何實現屬性「wrap_content」?
回答
這是Official Documentation說(我將只是其中的一部分用於快速閱讀)
當查看對象的measure()
方法返回,其getMeasuredWidth()
和getMeasuredHeight()
值必須設置,與所有的沿那個View對象的後代。 View對象的測量寬度和測量的高度值必須遵守由View對象的父母施加的約束。這保證了在測量結束時,所有父母都接受他們所有孩子的測量。父視圖可以多次呼叫measure()
對其子女。例如,父母可以用未指定的尺寸對每個孩子進行一次測量,以確定他們想要的大小,然後如果所有孩子的無約束尺寸的總和過大或過小,則再次用實際數字對其調用measure()
(即,如果孩子們彼此不同意他們每個人得到多少空間,那麼父母會介入並在第二次通過時設置規則)。
度量傳遞使用兩個類來傳遞維度。 View對象使用ViewGroup.LayoutParams
類來告訴他們的父母他們想要如何測量和定位。基類ViewGroup.LayoutParams
類只是描述View對於寬度和高度都有多大。對於每一個維度,它可以指定一個:
MATCH_PARENT
,這意味着視圖想要成爲大如其父(減去填充)
WRAP_CONTENT
,這意味着視圖想要剛好足夠大到附上其內容(加上填充)。
MeasureSpec
對象用於將需求從父項推送到子項。 A MeasureSpec
可以處於以下三種模式中的一種:
UNSPECIFIED
:由父級用於確定子View的所需維度。例如,一個LinearLayout
可能會調用measure()
其子高度設置爲UNSPECIFIED
和寬度爲EXACTLY
240,以查明子View的高度有多高,需要240個像素的寬度。
EXACTLY
:父母使用這種方式在孩子身上施加確切的尺寸。孩子必須使用這個尺寸,並保證所有的後代都符合這個尺寸。
AT MOST
:父母使用此設置將最大尺寸強加給孩子。孩子必須保證它和它的所有後代都適合這個尺寸。
- 1. 在android中實現uitextfield屬性
- 2. xs:獨特如何實現屬性?
- 3. 如何在mvc中實現UIHint屬性
- 4. 如何實現這個屬性文件?
- 5. 如何實現只讀屬性
- 6. 如何實現索引[]默認屬性
- 7. 如何在TextBox上實現TextChanging屬性?
- 8. 如何實現緩存屬性?
- 9. 如何使用INotifyPropertyChanged實現DataTable屬性
- 10. MVC3遠程屬性,如何實現?
- 11. C++ Builder XE - 如何實現TFont屬性
- 12. System.DateTime.Year(及其他屬性)如何實現?
- 13. 你將如何實現屬性列表?
- 14. 如何實現屬性更改通知
- 15. 如何爲Python屬性實現__iadd__
- 16. 如何在接口中實現屬性
- 17. Android Wrap_Content
- 18. Swift如何在屬性屬性中實現ARC?
- 19. 如何實現微數據屬性 - data- *和擺脫ID屬性?
- 20. DialogFragment中的TableLayout不尊重「wrap_content」屬性
- 21. 如何實現Android API安全性?
- 22. 如何檢測具有屬性wrap_content的TextView的寬度?
- 23. 如何爲實體框架實現其他實體屬性?
- 24. 如何在c#中實現選擇性屬性可見性?
- 25. android imageview wrap_content
- 26. 要實現屬性與否?
- 27. 屬性和自動實現
- 28. MVC6的VersionedRoute屬性實現
- 29. 在VB.NET中實現屬性
- 30. Typscript實現接口屬性
這裏是你的答案http://developer.android.com/guide/topics/ui/how-android-draws.html – Rohit5k2