2011-06-24 70 views
2

相當驚訝的是,我還沒有找到關於Android盒子模型的詳細信息。我的意思是如何填充,邊距,重力等,他們都一起互動。Android的盒子模型

除了這個note about margin and padding在開發網站和這個SO question沒有太多的信息。

我在找什麼:

  • 什麼是利潤,填充,比重默認值等
  • 廠家可以改變這些默認值。如果是這樣,是否忽視這些默認值是一個好習慣,這樣您的應用程序在不同製造商之間看起來一致?
  • 如何解決衝突,特別是在組件和子項之間。
  • Android版本之間有什麼區別?

這真的很簡單,不值得在文檔中更深入的解釋嗎?

感謝,

胡安

回答

4

而是驚訝的是,我一直沒能找到有關Android的盒模型的詳細信息。

請注意,您的問題很少與LinearLayout有任何關係,與XUL或Flex中的「盒子模型」相同。也許你對「盒子模型」的定義與我使用的不同。

哪些頁邊距,填充,比重的默認值等

0個像素的默認邊距和填充。默認重力因部件/容器而異。

製造商是否可以更改這些默認值。

從技術上來說,是的,雖然我沒有意識到這是在實踐中完成的。

如何解決衝突,特別是在組件和子組件之間。

在邊距,填充或重力方面不存在任何可能的衝突。

Android版本之間有什麼區別?

不是我所知道的。

這真的很簡單,不值得在文檔中更深入的解釋嗎?

恕我直言,是的。

+0

有了衝突,我的意思是爲styles.xml,inline和9.patch資產中的相同元素定義填充。當然,這不是你想要的目的,但它可能發生並使你發瘋,對吧?也許我應該說優先而不是衝突? –

+0

AFAIK優先順序如下,優先順序降序。 ** 1)**給定'AttributeSet'中的任何屬性值_(這些通常是在佈局文件中指定的單個attrs)_ ** 2)** AttributeSet中指定的'style'資源(名爲「style」在佈局文件中)_ ** 3)**由defStyleAttr指定的默認樣式_(當前主題中指向樣式的屬性)_和'defStyleRes' _(實際樣式引用在重載的構造函數中指定)_ .. – Dori

+0

...最後** 4)**當前上下文中的基本值'主題'。當調用'Context.obtainStyledResults(...)'時,從上下文中抓取這些文件' – Dori

0

如果您將Android的盒子模型與CSS的盒子模型進行比較,我發現Android的確更容易掌握,且複雜程度更低。你沒有像填充符號那樣的元素被添加到元素的寬度。恕我直言,定位邏輯(CSS:浮動/絕對/相對等)非常好,優雅地封裝在Android的佈局組件。雖然有些東西在Android中很難做到(比如在視圖的底部有一個工具欄,並用列表填充剩下的工具欄 - 但這也涉及CSS中的邪惡hackery),但它比CSS更具可預測性。因爲箱子模型是直接的(邊緣,填充,寬度,高度),並且大部分定位和對齊都是佈局組件特定的(例如「重力」),所以我們建議您閱讀所有的佈局組件。在LinearLayout中,在RelativeLayout中的「layout_above/below/toLeftOf/toRightOf」,...)。

但我同意這個話題的完整指南(+很好的例子和類比)可以幫助新手更快地與Android佈局達成一致,因爲一些深入的信息只能作爲基於案例的代碼片段(只說網絡,書肯定會做得更好)。

作爲盒子模型的一個附註:我偶然發現的一個「特性」是設置爲元素背景的9-patch-drawables影響元素的填充。如果9貼片的方塊填充不爲0,則相應地設置該元素的填充,如果不覆蓋。這真的讓我有點尷尬。