我有一个FrameLayout,它包含一个列表视图和一个按钮。 FrameLayout的重点是,在其他元素之后的元素将显示在它们之上。
由于按钮代码低于ListView代码,我预计按钮将始终位于顶部,但事实并非如此。我无法弄明白 - 只要我的列表中有足够的项目,按钮就在它下面,它就变得过时了。
XML:
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lvMovies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:background="#fff"
android:elevation="3dp"
android:paddingTop="8dp" />
<Button
android:id="@+id/btnAddMovie"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="bottom|end"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/raised_action_button"
android:elevation="5dp"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:text="+"
android:textColor="#ffffff"
android:textSize="30sp" />
</FrameLayout>
答案 0 :(得分:1)
来自developer.android:
FrameLayout旨在阻挡屏幕上要显示的区域 单个项目。通常,FrameLayout应该用于保存单个 儿童观,
framelayout的当前尺寸是整个屏幕。如果我要使用整个屏幕进行上述布局,我会做类似以下的事情:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"
android:orientation="horizontal">
<ListView
android:id="@+id/lvMovies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:background="#fff"
android:elevation="3dp"
android:paddingTop="8dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:id="@+id/btnAddMovie"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_gravity="bottom|end"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:background="@drawable/raised_action_button"
android:elevation="5dp"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:text="+"
android:textColor="#ffffff"
android:textSize="30sp" />
</LinearLayout>
</LinearLayout>
您可以说高度或宽度为0dp,但不能同时为两者。然后,您使用layout_weight组合它。在这种情况下,第一个嵌套线性布局占据屏幕的5/6,第二个1/6。因此,您的按钮位于受保护的空间中,列表视图不会阻塞。
外部线性布局具有垂直方向,这使得两个内部布局堆叠在彼此之上,内部是水平的以使它们穿过整个屏幕。您需要调整这些权重以使其适合您。
答案 1 :(得分:0)
您可以使用RelativeLayout。如果你想在列表视图上看按钮视图android:layout_above =&#34; @ + id / btnAddMovie&#34;删除这一行。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lvMovies"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/btnAddMovie"
android:layout_marginBottom="8dp"
android:background="#fff"
android:elevation="3dp"
android:paddingTop="8dp" />
<Button
android:id="@+id/btnAddMovie"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom|end"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:elevation="5dp"
android:fontFamily="sans-serif-light"
android:gravity="center"
android:text="+"
android:textColor="#ffffff"
android:textSize="30sp" />
</RelativeLayout>
答案 2 :(得分:0)
从列表视图中删除elevation
属性。就是这样。
高程似乎导致元素位于其他元素之上。