Wie zentriere ich den Inhalt in einem linearen Layout?

155

Ich versuche, ein ImageViewInneres LinearLayouthorizontal und vertikal zu zentrieren, aber ich kann es einfach nicht. Der Hauptgrund, warum ich kein dafür verwende RelativeLayout, ist, dass ich das benötige layout_weight(mein Activitybesteht aus vier Spalten, die gleichmäßig aufgeteilt werden sollten und auch auf unterschiedliche Bildschirmbreiten reagieren, wobei jede Spalte ImageViewzentriert und ungedehnt ist).

Hier ist meine XML bisher:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:baselineAligned="false"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_speak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_speak" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_readtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_readtext" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_edit" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_config"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_config" />
    </LinearLayout>
</LinearLayout>
Horta
quelle
Post Screenshot wie Sie wollen und aktuellen Screenshot
Yogesh Tatwal

Antworten:

381

android:gravity kümmert sich um die Ausrichtung seiner Kinder,

android:layout_gravity kümmert sich um die Ausrichtung von selbst.

Verwenden Sie also eine davon.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:baselineAligned="false"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" >

        <ImageView
            android:id="@+id/imageButton_speak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_speak" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" >

        <ImageView
            android:id="@+id/imageButton_readtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_readtext" />
    </LinearLayout>

    ...
</LinearLayout>

oder

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:baselineAligned="false"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_speak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_speak" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_readtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_readtext" />
    </LinearLayout>

    ...
</LinearLayout>
Naetmul
quelle
"android: layout_gravity kümmert sich um sich selbst." würde ändern, um zu sagen, dass die Schwerkraft des Layouts vom Elternteil verwendet wird.
Ataulm
36

android:layout_gravity wird für das Layout selbst verwendet

Verwenden Sie android:gravity="center"für Kinder von IhnenLinearLayout

Ihr Code sollte also lauten:

<LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1" >
Tarsem Singh
quelle
7

Ich habe die hier genannten Lösungen ausprobiert, aber es hat mir nicht geholfen. Ich denke, die Lösung layout_widthmuss wrap_contentals Wert verwendet werden.

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_weight="1" >
ViTUu
quelle
5

Hier ist ein Beispielcode. Das hat bei mir funktioniert.

<LinearLayout
    android:gravity="center"
    >
    <TextView
        android:layout_gravity="center"
        />
    <Button
        android:layout_gravity="center"
        />
</LinearLayout>

Sie entwerfen also das lineare Layout so, dass der gesamte Inhalt (Textansicht und Schaltfläche) in der Mitte platziert wird. Anschließend werden die Textansicht und die Schaltfläche relativ zur Mitte des linearen Layouts platziert.

pcodex
quelle
1
einfach. Das Attribut "Schwerkraft" wirkt sich auf den Inhalt einer Ansicht aus. Was ist in diesem Fall der Inhalt des LinearLayout? Eine Textansicht und eine Schaltfläche. Tatsächlich weisen Sie den Layout-Manager an, den Inhalt des linearen Layouts zu zentralisieren.
pcodex
2

android:gravity kann in einem Layout verwendet werden, um seine untergeordneten Elemente auszurichten.

android:layout_gravity kann in jeder Ansicht verwendet werden, um sich in der übergeordneten Ansicht auszurichten.

HINWEIS: Wenn sich selbst oder Kinder nicht wie erwartet zentrieren, überprüfen Sie, ob Breite / Höhe vorhanden ist, match_parentund wechseln Sie zu etwas anderem

Gibolt
quelle