我有一个包含2个视图的FrameLayout,第二个类似于Close Button (X)
,我想将它放在右边。
我尝试过layout_gravity =“right”,但是没有用。
这是我的布局xml:
<FrameLayout android:layout_width="320dp"
android:layout_height="wrap_content"
android:id="@+id/layoutSmallImg">
<ImageView android:id="@+id/bigImage"
android:layout_width="320dp" android:layout_height="wrap_content"/>
<ImageView android:id="@+id/bigImage"
android:layout_width="320dp" android:layout_height="wrap_content"/>
<ImageButton android:id="@+id/closebutton"
android:background="@android:color/transparent"
android:layout_height="30dp" android:layout_marginTop="10dp"
android:layout_alignParentRight="true"
android:layout_width="30dp" android:paddingLeft="40dp"
android:visibility="gone"
android:src="@drawable/close" />
</FrameLayout>
答案 0 :(得分:31)
我建议你改用RelativeLayout
顺便说一句,你想要ImageView顶部或旁边的按钮吗?您将布局和imageView的宽度设置为相同的大小。FrameLayout旨在阻挡屏幕上的某个区域以显示单个项目。您可以将多个子项添加到FrameLayout并使用重力控制它们在FrameLayout中的位置。孩子们被堆成一堆,最近添加的孩子在上面。框架布局的大小是其最大子项(加上填充)的大小,可见或不可见(如果FrameLayout的父级允许)。仅当setConsiderGoneChildrenWhenMeasuring()设置为true时,GONE视图才会用于调整大小。
评论后,我可以看到两个选项:
机器人:paddingLeft = “250dp”
使按钮大小为320dp并添加自定义背景,大部分是透明的。将其设为补丁9,以便您可以确定在其中添加文本的位置(请参阅我的答案,了解如何执行此操作:How to create android spinner without down triangle on the right side of the widget)
答案 1 :(得分:21)
阅读DOCS:
FrameLayout旨在阻挡屏幕上要显示的区域 单个项目。通常,FrameLayout应该用于保存单个 子视图,因为它可能很难组织子视图 在没有孩子的情况下可以扩展到不同屏幕尺寸的方式 相互重叠。但是,您可以将多个子项添加到a FrameLayout并控制它们在FrameLayout中的位置 使用android:layout_gravity为每个孩子分配重力 属性。
尝试:
<TextView
.....
android:layout_gravity="right" />
您可以在FrameLayout
中的9个不同位置放置视图享受
答案 2 :(得分:9)
只需将 FrameLayout 中的元素放入第二个 RelativeLayout 即可。并使用 android:layout_alignParentRight =“true”作为您想要对齐的元素。
<FrameLayout android:layout_width="320dp" android:layout_height="wrap_content"
android:id="@+id/layoutSmallImg">
<RelativeLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView android:id="@+id/bigImage"
android:layout_width="320dp"
android:layout_height="wrap_content"/>
<ImageButton android:id="@+id/closebutton"
android:background="@android:color/transparent"
android:layout_height="30dp" android:layout_marginTop="10dp"
android:layout_alignParentRight="true"
android:layout_width="30dp" android:paddingLeft="40dp"
android:visibility="gone"
android:src="@drawable/close" />
</RelativeLayout>
</FrameLayout>
答案 3 :(得分:2)
改为使用RelativeLayout。
答案 4 :(得分:1)
以编程方式,您可以使用FrameLayout.LayoutParams设置边距。以下内容可用于在屏幕底部放置视图:
int desired_height_of_content = //whatever your want the height of your view to be
FrameLayout layout = new FrameLayout(this);
FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, desired_height_of_content);
int difference = screen_height - desired_height_of_content
flp.setMargins(difference, 0, 0, 0);
layout.addView(your_view, flp);
答案 5 :(得分:0)
您想使用FrameLayout还是RelativeLayout?
我的理解是,如果要将当前视图替换为另一个视图,则使用FrameLayout。您的要求可以通过RelativeLayout来实现。