Button 在 FrameLayout 中的 ListView 后面
Button is behind the ListView in FrameLayout
我有一个由列表视图和按钮组成的 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>
来自developer.android:
FrameLayout is designed to block out an area on the screen to display
a single item. Generally, FrameLayout should be used to hold a single
child view,
框架布局的当前尺寸是整个屏幕。如果我要将整个屏幕用于上述布局,我会执行如下操作:
<?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。因此,您的按钮位于受保护的 space 中,列表视图不会阻止它。
外部线性布局是垂直方向,这使得两个内部布局相互堆叠,内部是水平布局,使它们横跨整个屏幕。您需要调整这些权重以使其适合您。
您可以为此使用 RelativeLayout。如果你想在列表视图上使用按钮视图 android:layout_above="@+id/btnAddMovie" 删除这一行。
<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>
从列表视图中删除 elevation
属性。而已。
似乎是高度导致该元素位于其他元素之上。
我有一个由列表视图和按钮组成的 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>
来自developer.android:
FrameLayout is designed to block out an area on the screen to display a single item. Generally, FrameLayout should be used to hold a single child view,
框架布局的当前尺寸是整个屏幕。如果我要将整个屏幕用于上述布局,我会执行如下操作:
<?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。因此,您的按钮位于受保护的 space 中,列表视图不会阻止它。
外部线性布局是垂直方向,这使得两个内部布局相互堆叠,内部是水平布局,使它们横跨整个屏幕。您需要调整这些权重以使其适合您。
您可以为此使用 RelativeLayout。如果你想在列表视图上使用按钮视图 android:layout_above="@+id/btnAddMovie" 删除这一行。
<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>
从列表视图中删除 elevation
属性。而已。
似乎是高度导致该元素位于其他元素之上。