39
<TextView
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:paddingTop="48dp"
    android:text="Test"
    />

我希望 TextView 的测量高度为 96dp,无论“测试”占用了多少空间(高度方面)(希望它被切断)。

相反,我得到了填充的完整“测试”+ 48dp。

我可以输入任何有效值layout_height并获得相同的结果。

要获得 96dp 的高度,我需要:

<TextView
    android:layout_width="match_parent"
    android:layout_height="<any valid value>"
    android:height="48dp"
    android:paddingTop="48dp"
    android:text="Test"
    />

再次,我可以将layout_height其作为任何有效值(但它需要作为必需属性存在)。

我从未height在 XML 中使用过该属性,但我在文档中找不到差异,特别是当它所操作的元素也具有填充和/或边距设置的值时,如何计算每个属性。

是否有任何资源可以讨论它,或者有人可以在这里解释它吗?


编辑(问题摘要):

可能是我使用它的情况导致了问题,因此可以忽略上面的示例(我在一个新项目中尝试过,并且从属性组合中得到了不同的结果)。

但我原来的问题仍然适用(有些重叠):

  1. 他们之间有什么区别?
  2. 什么时候应该使用一个而不是另一个?
  3. 使用一种会影响另一种的使用吗?
  4. 使用 one 是否会影响其他可以控制视图测量尺寸的属性,例如填充或边距?

编辑2(旁白):

如果与新项目相比,它有助于了解我的初始情况:

我有一个设置windowActionBarOverlay为 true 的活动,所以我的内容在(半透明)ActionBar 下流动。

我还使用了现在出现在 ActionBar 下的面包块。Ben Weiss 建议我将 Crouton 附加到不同的 ViewGroup,但我不确定将其附加到哪个 ViewGroup。

相反,我提供了一个自定义视图(在需要时会膨胀)作为 Crouton(问题第一部分中的 TextView),其顶部填充等于 ActionBar 的顶部填充,所以现在它在 ActionBar 下方垂直显示为正常(另一天有其他问题)。

4

4 回答 4

27

问题一:

(它们之间有什么区别?):

所有以 »layout_« 开头的属性都是View所属的ViewGroup的提示。为此,每个都有一组LayoutParams。小部件本身不使用它们。android.view.ViewGroup

参数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。请注意,边距是布局参数,并非每个布局管理器都支持边距。

有关详细信息,请参阅边距与填充

最后的话:

将所有宽度和高度属性仅视为提示更容易。对象大小的最终决定权是使用的布局管理器ViewGroup

于 2013-12-22T09:47:36.717 回答
0

从玩这个有点,我认为这layout_height是灵活的 - 一个首选的高度,但仍会随着内容的扩大/缩小 - 并且height是一个确定的价值。

您的情况是 TextView 环绕Test文本但仍使用 48dppaddingTop属性。

于 2013-06-30T17:30:22.493 回答
0

android:height 使视图正好有这么多像素高,而 android:layout_height 指定视图的基本高度。

于 2013-10-18T13:35:26.893 回答
0

好吧,android_layout:height 指定了 VIEW 的基本高度,而 android:height 指定了对象的高度(例如,xml 中的按钮)。

祝你好运!:)

于 2013-08-09T15:06:55.967 回答