android:height和android:layout_height有什么区别?

时间:2013-06-30 13:53:56

标签: android android-layout

<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作为任何有效值(但它必须作为必需属性存在)。

我从来没有在XML中使用过height属性,但我找不到文档中的差异,尤其是当它运行的元素也为padding和/或设置值时,每个属性的计算方式裕度。

有没有可用的资源可以讨论它,或者有人可以在这里解释一下吗?


编辑(问题摘要):

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

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

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

  5. 编辑2(旁边):

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

    我有一项将windowActionBarOverlay设为true的活动,因此我的内容会在(半透明的)ActionBar下流动。

    我也使用Croutons,它现在出现在ActionBar下面。 Ben Weiss建议我将Crouton附加到另一个ViewGroup,但我不确定将哪个ViewGroup附加到它。

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

4 个答案:

答案 0 :(得分:21)

问题1:

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

android:height参数是android.view.View初始大小。但如果视图是ViewGroup的一部分,那么ViewGroup将根据其布局规则调整对象的大小。

BTW:较新的API有一个新的android:minHeightandroid:maxHeight属性来澄清程序员的意图。

请注意,如果您未设置android:height,则视图将自行计算大小。大部分时间都做正确的事。

问题2:

ViewGroup是抽象的 - 这个问题的答案取决于您正在使用的实际子课程。

请注意,WRAP_CONTENT告诉使用ViewGroup来使用android:height。这意味着这是您的示例中使用的正确参数。

问题3:

是的 - 递归地。 TableLayout将读取和写入android:width属性以找出最宽的对象,并将所有其他对象的大小调整为它。

问题4:

android:padding否,但android:layout_margin是。请注意,边距是布局参数,并非每个布局管理器都支持边距。

有关详细信息,请参阅margin vs padding

最后的话:

更容易将所有宽度和高度属性视为提示。最后说的对象大小具有使用的ViewGroup的布局管理器。

答案 1 :(得分:0)

从这一点开始,我认为layout_height是灵活的 - 一个首选的高度,但仍会随内容扩展/缩小 - height是一个明确的值。

在您的情况下发生的事情是TextView围绕Test文本,但仍然使用48dp paddingTop属性。

答案 2 :(得分:0)

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

祝你好运! :)

答案 3 :(得分:0)

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