2011-06-24 65 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,则相应地设置该元素的填充,如果不覆盖。这真的让我有点尴尬。