0

我想按照下图制作这样的布局。我可以在 iphone 设备中看到这张图片。

在这里,我使用框架布局来实现在 imageview 上覆盖顶部和底部图像栏,但是在使用框架布局后,我只能看到顶部图像栏覆盖而不是底部图像栏?为什么会发生?

忘记了顶部和底部 iamge 栏的内容。我正在专注于实现此功能。

如果我的代码有误,请纠正我。

xml文件代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <include
        android:id="@+id/top_bar"
        layout="@layout/item_below_image_bar"
        android:gravity="top" />

    <it.sephiroth.android.library.imagezoom.ImageViewTouch
        android:id="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:adjustViewBounds="true"
        android:contentDescription="@string/descr_image"
        android:scaleType="fitXY" />

    <include
        android:id="@+id/below_bar"
        layout="@layout/item_below_image_bar"
        android:gravity="bottom" />

</FrameLayout>
4

1 回答 1

1

根据 android文档

子视图绘制在堆栈中,最近添加的子视图在顶部。

所以你需要安排你的布局如下

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <it.sephiroth.android.library.imagezoom.ImageViewTouch
        android:id="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:adjustViewBounds="true"
        android:contentDescription="@string/descr_image"
        android:scaleType="fitXY" />   

    <include
        android:id="@+id/top_bar"
        layout="@layout/item_below_image_bar"
        android:gravity="top" />

    <include
        android:id="@+id/below_bar"
        layout="@layout/item_below_image_bar"
        android:gravity="bottom" />

</FrameLayout>

在这种情况下,视图的实际位置不是由在 xml 中声明视图的顺序决定的。对于线性布局,这将是正确的,但对于 FrameLayout 则并非如此,在框架布局中,位置由重力决定,因此您的视图仍将放置在正确的位置,并且它们将按声明的顺序加载,所以首先是图像视图,然后第一个包含放在上面,然后第二个包含放在上面(但是在这种情况下它们不相交,所以没关系)。

编辑2:与山姆聊天后,我们能够找出问题,这是我们的解决方案

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent">

    <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:id="@+id/greenImage"
            android:src="#2dff3d"/>


    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp"
            >

        <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button"
                android:layout_alignParentRight="true"/>

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="My Label"
                android:id="@+id/textView"
                android:layout_centerVertical="true"/>
    </RelativeLayout>

    <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginLeft="14dp"
            android:layout_marginRight="14dp">

        <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button"
                android:layout_alignParentRight="true"/>

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="My Label"
                android:id="@+id/textView1"
                android:layout_centerVertical="true"/>
    </RelativeLayout>


</FrameLayout>

请注意 layout_gravity 的用法与重力相对应。

于 2013-05-03T17:31:53.327 回答