如何在 FrameLayout 中将元素右对齐?
Posted
技术标签:
【中文标题】如何在 FrameLayout 中将元素右对齐?【英文标题】:How can I align an element to the right in the FrameLayout? 【发布时间】:2011-08-28 23:25:17 【问题描述】:我有一个 FrameLayout,其中包含 2 个视图,第二个类似于 Close Button (X)
,我想将其放置在右侧。
我试过 layout_gravity = " right ",但没用。
这是我的布局 xml:
<FrameLayout android:layout_
android:layout_
android:id="@+id/layoutSmallImg">
<ImageView android:id="@+id/bigImage"
android:layout_ android:layout_/>
<ImageView android:id="@+id/bigImage"
android:layout_ android:layout_/>
<ImageButton android:id="@+id/closebutton"
android:background="@android:color/transparent"
android:layout_ android:layout_marginTop="10dp"
android:layout_alignParentRight="true"
android:layout_ android:paddingLeft="40dp"
android:visibility="gone"
android:src="@drawable/close" />
</FrameLayout>
【问题讨论】:
【参考方案1】:我建议您改用RelativeLayout
FrameLayout 的设计目的是在屏幕上屏蔽一个区域以显示单个项目。您可以将多个子项添加到 FrameLayout 并使用重力控制它们在 FrameLayout 中的位置。孩子们被画在一个堆栈中,最近添加的孩子在最上面。框架布局的大小是其最大子项(加上填充)的大小,可见与否(如果 FrameLayout 的父项允许)。仅当 setConsiderGoneChildrenWhenMeasuring() 设置为 true 时,才会使用 GONE 的视图来调整大小。
顺便说一句,你想要 ImageView 顶部的按钮还是旁边的按钮?您将布局和 imageView 的宽度设置为相同的大小。
评论后,我可以看到两个选项:
android:paddingLeft="250dp"
使按钮大小为 320dp 并添加自定义背景,大部分是透明的。使其成为补丁 9,以便您可以确定在其中添加文本的位置(有关如何执行此操作,请参阅我的答案:How to create android spinner without down triangle on the right side of the widget)
【讨论】:
感谢您的回答,我知道使用 relativeLayout 是可能的,我想在 FrameLayout 中对齐它,:( 是的,我希望 imageButton 位于 imageView 的顶部 | 右侧,它看起来像 Close我的图片按钮,当我点击时,图片会淡出 感谢您抽出宝贵时间,我想我会再次使用 RelativeLayout ,但我对 FrameLayout 并不满意 :)【参考方案2】:阅读文档:
FrameLayout 的设计目的是在屏幕上屏蔽一个区域以显示 单个项目。一般情况下,应该使用 FrameLayout 来容纳单个 子视图,因为在一个子视图中组织子视图可能很困难 在没有孩子的情况下可扩展到不同屏幕尺寸的方式 相互重叠。但是,您可以将多个孩子添加到 FrameLayout 并通过以下方式控制它们在 FrameLayout 中的位置 使用 android:layout_gravity 为每个孩子分配重力 属性。
试试:
<TextView
.....
android:layout_gravity="right" />
您可以在 FrameLayout 中的 9 个不同位置放置视图
享受
【讨论】:
这行得通。我相信 RelativeLayouts 的布局也比 FrameLayout 更昂贵。 谢谢!这解决了当 RelativeLayout 占据所有屏幕***.com/questions/6486214/… 时的问题【参考方案3】:只需将您的元素放入 FrameLayout 到第二个 RelativeLayout。并使用 android:layout_alignParentRight="true" 作为要右对齐的元素。
<FrameLayout android:layout_ android:layout_
android:id="@+id/layoutSmallImg">
<RelativeLayout
android:id="@+id/content"
android:layout_
android:layout_ >
<ImageView android:id="@+id/bigImage"
android:layout_
android:layout_/>
<ImageButton android:id="@+id/closebutton"
android:background="@android:color/transparent"
android:layout_ android:layout_marginTop="10dp"
android:layout_alignParentRight="true"
android:layout_ android:paddingLeft="40dp"
android:visibility="gone"
android:src="@drawable/close" />
</RelativeLayout>
</FrameLayout>
【讨论】:
【参考方案4】:请改用RelativeLayout。
【讨论】:
感谢您的回答,我知道使用 relativeLayout 是可能的,我想在 FrameLayout 中对齐它,:( 然后在视图中添加左边距【参考方案5】:以编程方式,您可以使用 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);
【讨论】:
【参考方案6】:你想使用 FrameLayout 还是 RelativeLayout?
我的理解是,如果您想用另一个视图替换当前视图,则使用 FrameLayout。 RelativeLayout 可以满足您的要求。
【讨论】:
感谢您的回复我想使用 FrameLayout,b 默认,FrameLAyout 位置在 frameLayout 的左上角视图,我想这样做,但在右上角, 您也可以使用 FrameLayout 实现您想要的。将 ImageButton 的 layout_gravity 设置为“right”。 layout_alignParentRight 适用于RelativeLayout,我不知道它是否也适用于FrameLayout。其他任何人,请说明这一点。 谢谢,但我已经尝试过 layout_gravity="right" 但它不起作用:) 我实际上复制了您的代码,只是删除了 android:visibility="gone" 这一行。我添加了 layout_gravity="right"。它对我来说非常好。只是我手机的屏幕尺寸不是很大,所以我得到了一个半切的图像,但我确实把它对齐了,所以它工作正常:) 是的,我知道,我看到我的逻辑足以将 ImageButton 向右对齐,但最后,我使用了 RelativeLayout,它现在工作的基本要素 :) 谢谢为你的时间;)以上是关于如何在 FrameLayout 中将元素右对齐?的主要内容,如果未能解决你的问题,请参考以下文章