android:height 和 android:layout_height 有啥区别?
Posted
技术标签:
【中文标题】android:height 和 android:layout_height 有啥区别?【英文标题】:What's the difference between android:height and android:layout_height?android:height 和 android:layout_height 有什么区别? 【发布时间】:2013-06-27 18:46:28 【问题描述】:<TextView
android:layout_
android:layout_
android:paddingTop="48dp"
android:text="Test"
/>
我希望 TextView 的测量高度为 96dp,无论“测试”占用了多少空间(高度方面)(希望它被切断)。
相反,我得到了完整的“测试”+ 48dp 的填充。
我可以为layout_height
输入任何有效值并得到相同的结果。
要获得 96dp 的高度,我需要:
<TextView
android:layout_
android:layout_
android:
android:paddingTop="48dp"
android:text="Test"
/>
同样,我可以将layout_height
作为任何有效值(但它需要作为必需属性存在)。
我从未在 XML 中使用过 height
属性,但我在文档中找不到差异,尤其是当它所操作的元素也设置了填充和/或边距值时,如何计算每个属性。
是否有任何资源可以讨论它,或者有人可以在这里解释它吗?
android:layout_height android:height LayoutParams编辑(问题摘要):
可能是我使用它的情况导致了问题,所以我的上面的例子可以忽略(我在一个新项目中尝试过,从属性组合中得到了不同的结果)。
但我原来的问题仍然适用(有些重叠):
-
它们之间有什么区别?
什么时候应该使用一个而不是另一个?
使用一种会影响使用另一种吗?
使用 one 是否会影响其他可以控制视图测量尺寸的属性,例如内边距或边距?
编辑 2(旁白):
如果与新项目相比,它有助于了解我的初始情况:
我有一个将 windowActionBarOverlay
设置为 true 的活动,因此我的内容在(半透明)ActionBar 下流动。
我也使用面包块,现在出现在 ActionBar 下。 Ben Weiss 建议我将 Crouton 附加到不同的 ViewGroup,但我不确定将其附加到哪个 ViewGroup。
相反,我提供了一个自定义视图(在需要时会膨胀)作为 Crouton(问题第一部分中的 TextView),其顶部填充等于 ActionBar 的顶部填充,所以现在它垂直显示在下方ActionBar 正常(改天有其他问题)。
【问题讨论】:
有人能建议我如何改进这个问题,这样它就不需要匿名投票了吗? 这里有一个类似的问题:***.com/questions/18091531/… 感谢@Prince,基于此,我投票决定关闭...显然我的是tl;dr
:P
@ataulm 如果搜索“android layout_height vs height”,Google 会首先找到这个问题。 - 这个问题也是一个月前的。 ——而这个问题现在有了一个详尽的答案。 - 所以如果有什么其他问题应该被关闭。
【参考方案1】:
从稍微玩弄一下,我认为layout_height
是灵活的 - 一个首选的高度,但仍会随内容扩展/缩小 - 而height
是一个确定的值。
您的情况是 TextView 环绕 Test
文本,但仍使用 48dp paddingTop
属性。
【讨论】:
是的。但有些android.view.ViewGroup
可能实际上自己设置高度。一切都取决于使用的布局策略。【参考方案2】:
好吧,android_layout:height 指定了 VIEW 的基本高度,而 android:height 指定了对象的高度(例如,xml 中的按钮)。
祝你好运! :)
【讨论】:
不完全android_layout:height
不是视图的一部分。它告诉父 android.view.ViewGroup
你想要的尺寸。【参考方案3】:
android:height 使视图正好有这么多像素高,而 android:layout_height 指定视图的基本高度。
【讨论】:
其实:反之亦然。【参考方案4】:问题一:
(它们有什么区别?):
所有以 »layout_« 开头的属性都是 ViewGroup 的提示,View 是其中的一部分。为此,每个android.view.ViewGroup
都有一组LayoutParams。小部件本身不使用它们。
android:height
参数是android.view.View
的初始大小。但是如果视图是ViewGroup
的一部分,那么ViewGroup
将根据其布局规则调整对象的大小。
顺便说一句:较新的 API 有一个新的 android:minHeight
和 android:maxHeight
属性来阐明程序员的意图。
请注意,如果您不设置android:height
,视图将自行计算大小。在大多数情况下,这是正确的做法。
问题 2
(什么时候应该使用一个而不是另一个?):
ViewGroup
是抽象的——这个问题的答案取决于您使用的实际子类。
注意WRAP_CONTENT
告诉使用ViewGroup
使用android:height
。这意味着这是在您的示例中使用的正确参数。
问题 3
(使用一个会影响另一个的使用吗?):
是的——而且是递归的。 TableLayout 将读写android:width
属性以找出最宽的对象并将所有其他对象的大小调整为它。
问题 4
(使用 one 是否会影响其他可以控制视图测量尺寸的属性,例如填充或边距?)
android:padding
否,但 android:layout_margin
是。请注意,边距是一个布局参数,并非每个布局管理器都支持边距。
详情请见margin vs padding。
最后的话:
更容易将所有宽度和高度属性视为提示。对象大小的最终决定权在于所用ViewGroup
的布局管理器。
【讨论】:
以上是关于android:height 和 android:layout_height 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章