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:minHeightandroid: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 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Android学习

元素形状没有必需的属性 android:layout_height

android学习-第一讲

android线性布局,如何居中?

怎样改变android:radiobutton的大小

Android中一个关于ListView的奇怪问题