21

2 つのビューを含む FrameLayout があります。2 つ目は a のようなもの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>
4

6 に答える 6

33

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

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

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


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

于 2011-05-19T15:12:45.173 に答える
28

ドキュメントを読む:

FrameLayout は、画面上の領域をブロックして 1 つの項目を表示するように設計されています。通常、FrameLayout は単一の子ビューを保持するために使用する必要があります。これは、子ビューが互いに重なり合うことなく、さまざまな画面サイズに拡張できるように子ビューを整理することが難しい場合があるためです。ただし、複数の子を FrameLayout に追加し、android:layout_gravity 属性を使用して各子に重力を割り当てることで、FrameLayout 内の位置を制御できます。

試す:

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

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

楽しみ

于 2014-09-15T18:47:28.407 に答える
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>
于 2012-12-23T13:44:13.240 に答える
1

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

于 2011-05-19T15:12:04.140 に答える
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);
于 2016-02-08T12:20:11.903 に答える
0

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

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

于 2011-05-19T15:17:08.130 に答える