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.

CommonsWare
quelle
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

Eric Mill
quelle
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>
Pentium10
quelle
15

Ich konnte eine Ansicht mit zentrieren

android:layout_centerHorizontal="true" 

und

android:layout_centerVertical="true" 

params.

Krishna Singh
quelle
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"
/>
Maksim Dmitriev
quelle
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

Suragch
quelle
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"
Md Nazrul Islam
quelle
2

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

Rasika Sugathadasa
quelle
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

Live-Liebe
quelle
-1

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

James Idowu
quelle