0

今天我一直在玩 LinearLayout 并且对结果感到惊讶:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     android:orientation="vertical" >



<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Big Text"
    android:gravity="center_vertical|center_horizontal"
    android:textAppearance="?android:attr/textAppearanceLarge" />


<TextView
   android:id="@+id/textView2"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:text="Medium Text"
   android:textAppearance="?android:attr/textAppearanceMedium" />   


<Button
    android:id="@+id/button1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:text="Button"
   />

</LinearLayout>

这是一个简单的布局,带有一个文本视图标题,然后是一个文本视图,我希望它覆盖所有父级(但底部按钮占用的空间)和一个放置在底部的按钮,其 layout_gravity="bottom" .

这会产生一个布局,其中标题正确显示,中心文本视图覆盖所有剩余的可用空间并且按钮不出现。为什么是这样?中心文本视图不应该只考虑底部按钮的大小来计算它的大小吗?

4

4 回答 4

3

在你的中心使用 layout_weight="1" TextView

于 2012-05-30T09:11:11.667 回答
1

中心文本视图不应该只考虑底部按钮的大小来计算它的大小吗?

不,因为您告诉第二个TextView匹配其父级的高度,FILL_PARENT因此它将填满所有剩余空间,最后一个TextView.

(...) 和一个放置在底部的按钮,layout_gravity="bottom"。

不幸的是,这不是 a 的LinearLayout工作方式。如果将方向设置为垂直,则基本上只有leftright重力会起作用。反之亦然,使用(默认)水平方向,只有topbottom工作。方向确定View子项按顺序动态定位的方向,这意味着您无法手动更改该方向的“位置”。

现在,为了获得所需的效果,您可以为第二个TextView指定高度0dp和 的权重1,使其动态填充所有剩余空间,而不会将第三个推TextView离底部。或者,您可以使用 a ,您可以RelativeLayout使用它直接设置位置,并简单地指示中间坐在第一个下方,但在最后一个上方。TextView

于 2012-05-30T09:25:34.197 回答
1

永远记住拇指法则

如果您在找到控件后立即使用具有垂直方向的线性布局

android:layout_height="match_parent"

布局将忽略其下方的所有控件。

希望这有帮助

维普尔

于 2012-05-30T09:20:34.353 回答
1

代替这个

 android:layout_width="match_parent"
 android:layout_height="match_parent"

像这样使用“wrap_content”

  android:layout_width="wrap_content"/"fill_parent"
  android:layout_height="wrap_content"/"fill_parent"
于 2012-05-30T09:24:03.070 回答