Button位于FrameLayout中的ListView后面

时间:2015-02-13 21:49:10

标签: android xml listview android-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>

3 个答案:

答案 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属性。就是这样。

高程似乎导致元素位于其他元素之上。