web-dev-qa-db-ja.com

FrameLayoutで要素を右に揃えるにはどうすればよいですか?

2つのビューを含むFrameLayoutがあります。2番目は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>
19
Houcine

代わりにRelativeLayoutを使用することをお勧めします

FrameLayoutは、画面上の領域をブロックして単一のアイテムを表示するように設計されています。複数の子をFrameLayoutに追加して、FrameLayout内のそれらの位置を制御できます。重力を使用して。子はスタックに描画され、最後に追加された子が上になります。フレームレイアウトのサイズは、表示または非表示(FrameLayoutの親が許可する場合)の最大の子(およびパディング)のサイズです。 GONEであるビューは、setConsiderGoneChildrenWhenMeasuring()がtrueに設定されている場合にのみ、サイズ変更に使用されます。

ところで、ImageViewの上または横にボタンを配置しますか?レイアウトとimageViewの両方の幅を同じサイズに設定しています。


コメントの後に、2つのオプションが表示されます:

31
Aleadam

ドキュメントを読む:

FrameLayoutは、画面上の領域をブロックして単一のアイテムを表示するように設計されています。通常、FrameLayoutは単一の子ビューを保持するために使用する必要があります。これは、子が互いに重ならない限り、さまざまな画面サイズにスケーラブルな方法で子ビューを編成することが難しい場合があるためです。ただし、Android:layout_gravity属性を使用して各子に重力を割り当てることにより、FrameLayoutに複数の子を追加し、FrameLayout内での子の位置を制御できます。

試してください:

<TextView
     .....
     Android:layout_gravity="right" />

FrameLayout内の9つの異なる場所にビューを配置できます

楽しい

21
Yotam

要素をFrameLayoutの中に2番目の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>
9

代わりに RelativeLayout を使用してください。

2

プログラム的には、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);
1
Casey Murray

FrameLayoutまたはRelativeLayoutを使用しますか?

現在のビューを別のビューに置き換える場合は、FrameLayoutが使用されると私は理解しています。 RelativeLayoutによって要件を満たすことができます。

0
varuaa