虽然其他答案试图解决你的问题(他们实际上没有 - 他们建议你做一些看起来相似但在不同设备上可能会或可能看起来不太好的东西),没有人填补你对LinearLayouts知识的空白和match_parent . 这些差距非常普遍 - 谷歌的文档仍然远远低于恒星 .
首先,Views如何在LinearLayout中工作?让我们完成绘制LinearLayout的过程,为简单起见使用 orientation="vertical" .
检查LinearLayout(简称LL)的第一个子节点的高度 . 如果高度为 match_parent 或 fill_parent (同一事物的旧名称),则会拉伸视图的高度以填充整个查看区域 . 如果高度为 wrap_content ,则测量View所采用的垂直空间,并将该空间用于View . 如果高度是非零数字,请使用视图高度的那么多像素(如果太小则可能会剪辑) . 如果高度为0,请参见下文 .
将下一个视图放在视图下方1.检查其高度并采取相应措施 .
继续查看所有视图 . 如果View被推离底部,请继续并停止计算,因为没有人会看到它或任何后续视图(假设没有ScrollView) .
如果视图的高度为0,请检查它的 gravity . 这需要第二次传递,存储所有视图的重力,然后按比例分配它们的高度 . 正如您所猜测的那样,第二遍可以将布局所需的时间加倍,这对于简单布局来说并不重要 .
Explanation of your example :LL的第一个子节点(第一个TextView)被测量并占用一定量的像素 . 然后您的ListView占用所有剩余空间(通过 match_parent ) . 然后你的第二个TextView根本不会被绘制,因为它不在屏幕的底部 . 这几乎是你观察到的,但现在你明白了为什么 .
Solution :使用 RelativeLayout . 在这种情况下完美地工作 .
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:id="@+id/top_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:textSize="30sp"
android:text="Top TextView" />
android:id="@+id/bottom_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:textSize="30sp"
android:text="Bottom TextView" />
android:id="@+id/listView_Species"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/top_tv"
android:layout_above="@id/bottom_tv"
/>
RelativeLayout告诉布局inflater在顶部绘制第一个TextView,然后在底部绘制第二个TextView,然后用ListView填充剩余的空间 . 我相信这正是你想要的 .
欢迎使用Android . 你将使用这种模式很多!