我正在尝试为我的应用程序编写替代的横向视图文件(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>
答案 0 :(得分:2)
您应该使用相对布局或线性布局来实现此目的,因为框架布局根本就不是为此而设计的。 这是框架布局的api文档 -
FrameLayout旨在阻挡屏幕上要显示的区域 单个项目。通常,FrameLayout应该用于保存单个 子视图,因为它可能很难组织子视图 在没有孩子的情况下可以扩展到不同屏幕尺寸的方式 相互重叠。但是,您可以将多个子项添加到a FrameLayout并控制它们在FrameLayout中的位置 使用android:layout_gravity为每个孩子分配重力 属性。
因此,在Frame布局中控制子项的位置非常有限,即仅使用重力。