如何在FrameLayout中巧妙地堆叠按钮和TextView?

时间:2014-01-01 08:01:00

标签: android xml android-framelayout layout-gravity

我正在尝试为我的应用程序编写替代的横向视图文件(xml文件),我必须使用FrameLayout而不是LinearLayout(这就是本书所说的)。但是Framelayout堆栈不好,所以我们应该使用android:layout_gravity然后分配x / y维度,例如:android:layout_gravity="center"。这个例子正好在中间(垂直和水平)中心。

但我的问题是,我在垂直平面上有4个等级,我想放置东西。一个文本行,一行有2个按钮(true,false),另一个按钮(作弊),最后一行有2个箭头按钮(上一个和下一个)。但是对于layout_gravity,它们只有非常粗略的位置:顶部,中间,底部。我注意到如果你没有指定任何东西,它们都会在左上角结束。

那么如何将它们垂直堆叠,使它们从上到下间隔很好?分配2个相同参数的东西不会叠加它们,而是将它们重叠得很重。

感谢您的帮助,下面是我的代码。我还没有放任何重力布局。

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

    <TextView 
        android:id="@+id/question_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="24dp" />        

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/true_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/true_button" />

        <Button
            android:id="@+id/false_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/false_button" />

    </LinearLayout>

    <Button 
        android:id="@+id/cheat_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/cheat_button" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageButton
        android:id="@+id/prev_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow_left"
        android:contentDescription="@string/move_back"
         />

        <ImageButton
        android:id="@+id/next_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/arrow_right"
        android:contentDescription="@string/move_forward"
        />

    </LinearLayout>

</FrameLayout>  

1 个答案:

答案 0 :(得分:2)

您应该使用相对布局或线性布局来实现此目的,因为框架布局根本就不是为此而设计的。 这是框架布局的api文档 -

  

FrameLayout旨在阻挡屏幕上要显示的区域   单个项目。通常,FrameLayout应该用于保存单个   子视图,因为它可能很难组织子视图   在没有孩子的情况下可以扩展到不同屏幕尺寸的方式   相互重叠。但是,您可以将多个子项添加到a   FrameLayout并控制它们在FrameLayout中的位置   使用android:layout_gravity为每个孩子分配重力   属性。

因此,在Frame布局中控制子项的位置非常有限,即仅使用重力。