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>
代わりにRelativeLayout
を使用することをお勧めします
FrameLayoutは、画面上の領域をブロックして単一のアイテムを表示するように設計されています。複数の子をFrameLayoutに追加して、FrameLayout内のそれらの位置を制御できます。重力を使用して。子はスタックに描画され、最後に追加された子が上になります。フレームレイアウトのサイズは、表示または非表示(FrameLayoutの親が許可する場合)の最大の子(およびパディング)のサイズです。 GONEであるビューは、setConsiderGoneChildrenWhenMeasuring()がtrueに設定されている場合にのみ、サイズ変更に使用されます。
ところで、ImageViewの上または横にボタンを配置しますか?レイアウトとimageViewの両方の幅を同じサイズに設定しています。
コメントの後に、2つのオプションが表示されます:
Android:paddingLeft = "250dp"
ボタンのサイズを320dpにし、カスタムの背景を追加します。パッチ9にして、テキストをどこに追加するかを決定できるようにします(その方法については、ここで私の回答を参照してください: 作成方法Android右下に三角形のないスピナーウィジェットの側面 )
ドキュメントを読む:
FrameLayoutは、画面上の領域をブロックして単一のアイテムを表示するように設計されています。通常、FrameLayoutは単一の子ビューを保持するために使用する必要があります。これは、子が互いに重ならない限り、さまざまな画面サイズにスケーラブルな方法で子ビューを編成することが難しい場合があるためです。ただし、Android:layout_gravity属性を使用して各子に重力を割り当てることにより、FrameLayoutに複数の子を追加し、FrameLayout内での子の位置を制御できます。
試してください:
<TextView
.....
Android:layout_gravity="right" />
FrameLayout内の9つの異なる場所にビューを配置できます
楽しい
要素を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>
代わりに RelativeLayout を使用してください。
プログラム的には、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);
FrameLayoutまたはRelativeLayoutを使用しますか?
現在のビューを別のビューに置き換える場合は、FrameLayoutが使用されると私は理解しています。 RelativeLayoutによって要件を満たすことができます。