如何在FrameLayout中将元素右对齐?

时间:2011-05-19 15:01:51

标签: android android-xml android-framelayout

我有一个包含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>

6 个答案:

答案 0 :(得分:31)

我建议你改用RelativeLayout

  

FrameLayout旨在阻挡屏幕上的某个区域以显示单个项目。您可以将多个子项添加到FrameLayout并使用重力控制它们在FrameLayout中的位置。孩子们被堆成一堆,最近添加的孩子在上面。框架布局的大小是其最大子项(加上填充)的大小,可见或不可见(如果FrameLayout的父级允许)。仅当setConsiderGoneChildrenWhenMeasuring()设置为true时,GONE视图才会用于调整大小。

顺便说一句,你想要ImageView顶部或旁边的按钮吗?您将布局和imageView的宽度设置为相同的大小。


评论后,我可以看到两个选项:

答案 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来实现。