2
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background_gradient" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center" >

        <ImageButton
            android:id="@+id/buttonLog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/log"
            android:onClick="log" />

    </RelativeLayout>

</FrameLayout>

ボタンが画面の中央に表示されることを期待していました。ただし、画面のTOP中央に表示されます(つまり、ボタンは水平方向に中央に配置されますが、垂直方向には中央に配置されません)。

私には、RelativeLayoutが「fill_parent」ではなく「wrap_content」で定義されたように動作しているように見えます。

面白いことに、RelativeLayoutのheightプロパティ(android:layout_height)に実際の値を指定すると、次のようになります。

<RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:gravity="center" >

次に、ボタンは正しく動作します(つまり、ボタンも垂直方向の中央に配置されます)。しかし、実際の値は使いたくありません。fill_parentを使用したい!「fill_parent」で動作しないのはなぜですか?

誰かが何が起こっているのか知っていますか?

前もって感謝します!

4

2 に答える 2

4

RelativeLayoutでは、レイアウト内の要素の位置を指定する必要があります。layout_belowまたはlayout_toLeftOfタグが表示されません。GravityはLinearLayoutsで機能します。一般に、LinearLayoutsは操作が簡単で、さまざまな画面サイズに合わせてはるかに適切にスケーリングされます。RelativeLayoutをLinearLayoutに置き換え、FrameLayoutをLinearLayoutに置き換えることをお勧めします。通常、FrameLayoutを使用するのは、重複する複数のレイアウトを使用する場合ですが、使用しません。

ここのようなAndroidSDKリファレンスドキュメントのレイアウトの使用について読むことをお勧めします:http://bit.ly/djmnn7

于 2012-06-01T03:34:21.940 に答える
1

とのfill_parent両方を指定したため、親ビューがいっぱいになります。デフォルトでは、相対レイアウトは、サイズに使用するかどうかに関係なく、子を左上隅に配置します。layout_widthlayout_heightRelativeLayoutfill_parent

RelativeLayout's独自の属性セットを利用して、目的の側面を実現する必要があります。これにより、子ビューを相互に、または親に対して相対的に配置できます。

<ImageButton
    android:id="@+id/buttonLog"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@drawable/log"
    android:onClick="log" />

を使用してandroid:layout_centerInParentこれを達成できます。この属性をtrueに設定すると、この子は親の中で水平方向と垂直方向の中央に配置されます。

于 2012-06-01T03:43:27.527 に答える