5

私の水平方向の LinearLayout では、1 つのビューで重力を center_vertical に設定し、次に 2 番目のビューで layout_gravity を設定しようとしましたが、そのビューは最初のビューの中央に配置されたテキストと並んでいます!

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView
        android:layout_width="100dp"
        android:layout_height="200dp"
        android:layout_gravity="top"
        android:background="@drawable/border"
        android:gravity="center_vertical"
        android:text="layout_gravity=top   gravity=center_vertical" >
    </TextView>            
    <TextView
        android:layout_width="100dp"
        android:layout_height="200dp"
        android:layout_gravity="top"
        android:background="@drawable/border"
        android:gravity="top"
        android:text="layout_gravity=top  gravity=top" >
    </TextView>
</LinearLayout>

ここに画像の説明を入力

そして、これは同じコードですが、垂直レイアウト用です。 垂直レイアウトで目的の動作が正しく機能することに注意してください。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:layout_gravity="left"
        android:background="@drawable/border"
        android:gravity="center_horizontal"
        android:text="layout_gravity=left   gravity=center_horizontal" >
    </TextView>            
    <TextView
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:layout_gravity="right"
        android:background="@drawable/border"
        android:gravity="right"
        android:text="layout_gravity=right  gravity=right" >
    </TextView>
</LinearLayout>

ここに画像の説明を入力

問題を解決するには、RelativeLayout または別のネストされた LinearLayout を使用するだけです。しかし、重力とレイアウト重力がどのように機能するかを理解していないかどうか知りたいので、この質問をしています!! これらの基本的な属性がどのように機能するかを理解することは、私にとって重要です。ありがとう

4

3 に答える 3

8

1 つを中央に配置し、もう 1 つを上にしたい場合は、LinearLayout にベースライン整列フラグを追加する必要があります。

android:baselineAligned="false"

レイアウトが子のベースラインに揃えられるのがデフォルトです。これは、子供たちが異なる値の重力を使用する場合に、このような問題を引き起こす可能性があります。

垂直方向との違いは、水平方向のようにベースラインを揃えることができないことです。

見る:

http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:baselineAligned

追加情報 - これは私ができるよりも問題をよく説明しているようです:

http://www.doubleencore.com/2013/10/shifty-baseline-alignment/

于 2014-09-29T05:04:18.627 に答える
0

「互いに接続されていない」ものを試している場合、つまり、2 つのウィジェットの間にスペースが必要な場合は、空白のウィジェットを使用し、重みを使用します

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="100" >

<TextView
    android:layout_width="100dp"
    android:layout_height="200dp"

    android:layout_weight="40"
    android:gravity="center_vertical"
    android:text="layout_gravity=top   gravity=center_vertical" >
</TextView>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="20" />

<TextView
    android:layout_width="100dp"
    android:layout_height="200dp"

    android:layout_weight="40"
    android:gravity="right"
    android:text="layout_gravity=top  gravity=top" >
</TextView>

</LinearLayout>

主な回答画像

必要な出力について明確ではありませんでした。これは、必要な出力として解釈できるものです..しかし、これがどのように機能するかを説明します..重みの詳細については、http://developer.android.com/にアクセスしてください参照/android/widget/package-summary.html

「ウィジェット」および「ウィジェットのコンテンツ」と呼ばれるものがあります。layout_gravityを使用してlinearlayoutについて話している間、メインビューでそれ自体の重力を「ウィジェット」として設定し、重力を使用してそのlinearlayoutのコンテンツに重力を設定します

同様に、 textview と同じように、 layout_gravityを使用すると (たとえば、center に等しい)、textview はそのスペースの中央に配置されます (つまり、layoutorientation が vertical の場合は幅の中央に配置され、layout_orientation が horizo​​ntal の場合は高さの中央に配置されます)。 )

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<TextView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:text="Second Activity" />



</LinearLayout>

水平 linear_layout

縦向きでも同じように見える

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:text="Second Activity" />

</LinearLayout>

垂直線形レイアウト

テキストビューに重力を適用すると、重力についても表示されるようになりました。テキストビューの「TEXT」は中央に配置されます(重力=中央の場合)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    **android:gravity="center"**
    android:text="Second Activity" />

</LinearLayout>

centerTextVertical

これで、重力がウィジェット内のコンテンツに重力を設定することがわかります.ウィジェットの「コンテンツ」はウィジェット自体にすることができます.. LinearLayout はウィジェットであり、線形レイアウト内にさらに他のタイプのウィジェット (ボタンとテキスト) を追加します。したがって、gravity=center を textview に適用すると、そのコンテンツ (つまり、テキスト) が中央に設定され、重力を linearlayout に適用すると、そのコンテンツ (つまり、textview) が中央に配置されます。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" 
android:gravity="center">

<TextView
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="Second Activity" />

</LinearLayout>

layout_gravity_center

于 2014-09-29T04:48:01.733 に答える