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

ata*_*ulm 33 android android-layout

<TextView
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:paddingTop="48dp"
    android:text="Test"
    />
Run Code Online (Sandbox Code Playgroud)

我希望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"
    />
Run Code Online (Sandbox Code Playgroud)

再次,我可以把layout_height任何有效值(但它需要作为必需属性).

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

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


编辑(问题摘要):

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

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

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

编辑2(旁边):

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

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

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

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

Mar*_*tin 23

问题1:

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

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.