Wie zentriere ich eine Ansicht in einem Android-Layout?


Antworten:


150

Schritt 1: Wickeln Sie alles, was Sie möchten, zentriert auf den Bildschirm im Vollbildmodus RelativeLayout.

Schritt 2: Geben Sie dieser untergeordneten Ansicht (der Ansicht, in der Sie zentriert sein möchten RelativeLayout) das android:layout_centerInParent="true"Attribut.


19
Dies funktionierte nur bei mir, als ich das Attribut android: layout_centerInParent = "true" in die Ansicht im RelativeLayout einfügte.
Dirk Jäckel

1
Was ist, wenn ich es in der Mitte positionieren möchte, es aber nach unten verschieben möchte, wenn die Gefahr besteht, dass es sich mit einer anderen Ansicht überschneidet?
Michał K

4
Sie müssen android:layout_centerInParent="true"die untergeordnete Ansicht aktivieren, nicht die RelativeLayout. android:layout_*Attribute wirken sich darauf aus, wie eine Ansicht in ihrem übergeordneten Element positioniert und dimensioniert wird, nicht darauf, wie die untergeordneten Elemente einer Ansicht in ihr positioniert und dimensioniert werden.
Karu

Ich werde eine BIG + 1 für Schritt 3 geben . Klassiker :-D, obwohl etwas schief gelaufen ist (aber mach dir keine Sorgen, sicher, dass es ein Rechtschreibfehler ist).
McLan

29

Sie können eine Zentrierung auf jede Ansicht anwenden, einschließlich eines Layouts, indem Sie das XML-Attribut android: layout_gravity "verwenden. Sie möchten ihr wahrscheinlich den Wert" center "geben.

Eine Referenz möglicher Werte für diese Option finden Sie hier: http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#attr_android:layout_gravity


2
AFAIK, layout_gravity ist nur für LinearLayout, nicht für beliebige Layouts.
CommonsWare

Wie Sie bereits erwähnt haben, ist layout_gravity nur für LinearLayout, was ist mit RelativeLayout, weil ich in der App die Textansicht in ImageView einbetten möchte
Vicky

Ich habe es auch mit Relativelayout versucht und meiner Meinung nach funktioniert es
Ludwigm

Es wird nicht nur mit LinearLayout verwendet, siehe dieses Beispiel: neugierig-creature.org/2009/03/01/…
Jan Berkel

FrameLayoutund LinearLayoutbeide unterstützen android:layout_gravityihre Kinder. RelativeLayoutnicht. Es ist alles in den Dokumenten .
Karu

19
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center">
    <ProgressBar
        android:id="@+id/ProgressBar01"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        android:layout_height="wrap_content"></ProgressBar>
    <TextView
        android:layout_below="@id/ProgressBar01"
        android:text="@string/please_wait_authenticating"
        android:id="@+id/txtText"
        android:paddingTop="30px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></TextView>
</RelativeLayout>

15

Ich konnte eine Ansicht mit zentrieren

android:layout_centerHorizontal="true" 

und

android:layout_centerVertical="true" 

params.


2
Beachten Sie, dass diese Attribute nur funktionieren, wenn sich die betreffende Ansicht (direkt) in a befindet RelativeLayout.
Karu

das ist genau das was ich brauchte! Danke
Joshmmo

6

Wenn Sie eine Ansicht zentrieren möchten, verwenden Sie diese. In diesem Fall muss TextView die unterste Ansicht in Ihrem XML sein, da layout_height match_parent ist.

<TextView 
    android:id="@+id/tv_to_be_centered"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:gravity="center"
    android:text="Some text"
/>

Er meinte, das Layout in die Mitte zu stellen, nicht die Ansicht.
Igor Ganapolsky

1
@IgorG. Das Positionieren eines Layouts und einer Ansicht ist identisch, da ein Layout eine Ansicht ist.
FoamyGuy

1
Die LayoutWidges werden zwar erweitert, ViewGroupaber ViewGroupdie Ansicht wird erweitert. So Layout ist ein ViewGroup , und ViewGroup ist ein View
FoamyGuy

Dieser Ansatz funktioniert nur, wenn die betreffende Ansicht keinen Hintergrund oder keinen On-Click-Listener usw. hat - im Grunde genommen, wenn Sie nicht sagen können, dass sie sehr groß ist. Auch die Ansicht muss das android:layout_gravityAttribut unterstützen.
Karu

6

Aktualisierte Antwort: Einschränkungslayout

Es scheint, dass der Trend in Android jetzt darin besteht, ein Constraint-Layout zu verwenden. Obwohl es einfach genug ist, eine Ansicht mit a zu RelativeLayoutzentrieren (wie andere Antworten gezeigt haben), ConstraintLayoutist das leistungsfähiger als das RelativeLayoutfür komplexere Layouts. Es lohnt sich also zu lernen, wie es jetzt geht.

Um eine Ansicht zu zentrieren, ziehen Sie einfach die Ziehpunkte auf alle vier Seiten des übergeordneten Elements.

Geben Sie hier die Bildbeschreibung ein


Welches Tool verwenden Sie, um dieses Video als GIF-Bild aufzunehmen und zu erstellen? Vielen Dank!
What'sUP

@ What'sUP, ich kann mich nicht erinnern, welches ich für dieses bestimmte animierte GIF verwendet habe. Dies hängt von Ihrem Betriebssystem ab. Ich habe Linux benutzt. Suchen Sie in Google nach etwas wie "Linux animierter GIF-Hersteller". Auf dem Mac verwende ich jetzt LICEcap.
Suragch

3

Es funktioniert für diesen Code und benötigt manchmal beide Eigenschaften

android:layout_gravity="center"
android:layout_centerHorizontal="true"

2

Fügen Sie android: layout_centerInParent = "true" zu dem Element hinzu, das Sie im RelativeLayout zentrieren möchten


1

Verwenden Sie ConstraintLayout. Hier ist ein Beispiel, mit dem die Ansicht entsprechend der Breite und Höhe des übergeordneten Bildschirms zentriert wird:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#FF00FF"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHeight_percent=".6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent=".4"></LinearLayout>
</android.support.constraint.ConstraintLayout>

Möglicherweise müssen Sie Ihren Gradle ändern, um die neueste Version von ConstraintLayout zu erhalten:

dependencies {
...
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}

Geben Sie hier die Bildbeschreibung ein


-1

Ich benutze android: layout_centerInParent = "true" und es hat funktioniert

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.