8

これはおそらく些細なレイアウトの質問だと思いますが、コンテナー レイアウトが多すぎると感じているものをレイヤー化しないと、思いどおりに動作させることができないようです。私がやろうとしているのは、次の条件が満たされるように ImageView をセットアップすることです。

  1. ImageView の幅は、親の幅 (現時点では画面の幅) の特定のパーセンテージです。
  2. ImageView は、画面内で水平方向に中央に配置されます。

XML レイアウトを使用してテスト ケースを作成しましたが、実際にはこれらのレイアウトとビューをプログラムで作成します。ただし、正しいレイアウトを理解するという目的では、これは問題ではないと思います。

私は、Android レイアウトの重みと、相対的な重み係数を使用して複数のビューをレイアウトするためにそれらが通常どのように使用されるかについてある程度精通しています。条件 1 を満たすために、コンテナー LinearLayout (水平方向) を作成し、その weightSum = 1 を設定してから、必要なパーセンテージ (0.5 など) の重みで ImageView を埋め込みます。これはうまくいきます!

次に、ImageView を水平方向に画面の中央に配置したいと考えています。そこで、重力を「center」/「centerHorizo​​ntal」に設定しました。選択したgravity/layout_gravity設定に関係なく、常に左側に整列しているように見えるため、これが私が行き詰まっている場所です。

レイアウト ファイル:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:weightSum="1.0">
        <ImageView
            android:src="@drawable/earth"
            android:adjustViewBounds="true"
            android:layout_width="0"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:layout_gravity="center_horizontal"
            android:id="@+id/imageView1" />
    </LinearLayout>
</LinearLayout>

結果:

左に配置された結果の画像

私が本当に達成したいのは、次のようなものです。

望ましい結果

しかし、それを達成するために、次のように、ImageView の両側に 0.25 の重みを持つ 2 つのダミー LinearLayout を挿入する必要がありました。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:weightSum="1.0">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="0"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"/>
        <ImageView
            android:src="@drawable/earth"
            android:adjustViewBounds="true"
            android:layout_width="0"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:layout_gravity="center_horizontal"
            android:id="@+id/imageView1" />
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="0"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"/>
    </LinearLayout>
</LinearLayout>

ビューのサイズと位置を調整するためだけに、最上位の LinearLayout とは別に 3 つの追加の LinearLayouts を使用する必要があるだけでなく、すべてのレイアウトをプログラムで実行したいため、これは私の意見では見苦しく厄介なレイアウトです。そして動的に。実行時にビューを右揃えまたは左揃えにするか、画面幅に合わせてスケーリング係数を変更することを決定する場合があります。このソリューションでは、ダミーのレイアウト ビューを追加/削除し、すべての重みを適切に設定する必要がある可能性があります。

私よりもレイアウトが得意な人がより良い解決策を持ってくれることを願っています! 理想的には、「重力」を設定できるもの (ただし、それを機能させることはできませんでした)、または水平 LinearLayout コンテナーとウェイトを必要とせずに幅を設定する別の方法です。トップレベルの垂直 LinearLayout で水平方向に。

ありがとう!

編集:ダミーのパディング LinearLayouts を使用した 2 回目のレイアウト試行で、2 番目のパディング LinearLayout (0.25 の重みに設定) を廃止し、ImageView の前にダミーのパディング LinearLayout を 1 つだけ使用できることに気付きました。親の weightSum。例えば:

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:weightSum="1.0">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="0"
            android:layout_height="wrap_content"
            android:layout_weight="0.25"/>
        <ImageView
            android:src="@drawable/earth"
            android:adjustViewBounds="true"
            android:layout_width="0"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:layout_gravity="center_horizontal"
            android:id="@+id/imageView1" />
    </LinearLayout>

まだ私が望んでいた理想的な解決策ではありません。

4

2 に答える 2

8

線形レイアウトに追加するだけですandroid:gravity="center"(imageViewではありません)

お役に立てば幸いです。

于 2013-08-29T15:17:38.607 に答える
0

親 LinearLayout が水平であるため、ImageView の重力は中央に配置されません。

親 LinearLayout の重力を設定したいとします。これは、親 (垂直 LinearLayout) 内で水平方向に中央に配置されます。

于 2013-08-29T15:21:15.540 に答える