Können Sie eine Schaltfläche in RelativeLayout zentrieren?


174

Ich versuche, eine Schaltfläche im relativen Layout zu zentrieren. Ist dies möglich? Ich habe die Funktionen Schwerkraft und Orientierung ausprobiert, aber sie tun nichts.


1
Sprache? Rahmen? Betriebssystem?
Arnold Spence

3
@ Arnold Spence: Du hast mich um 24 Sekunden geschlagen :)
Nippysaurus

3
Entschuldigung, ich verwende Stack Overflow zum ersten Mal. Ja, ich entwickle für Android. =)
Arcadia

7
Kein Problem. Die richtigen Tags werden die Aufmerksamkeit der richtigen Leute schneller auf sich ziehen. Behoben :)
Arnold Spence

8
+1 an Arnold Spence für seine Rücksichtnahme. Einige Leute auf SO hätten das OP verbal zerstört, weil sie nur "neu" waren.
Subby

Antworten:


370

Versuchen

android:layout_centerHorizontal="true"

Genau so funktioniert es bei mir:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#ff0000">

    <Button
        android:id="@+id/btn_mybutton"
        android:layout_height="wrap_content"
        android:layout_width="124dip"
        android:layout_marginTop="5dip"
        android:layout_centerHorizontal="true"/>

</RelativeLayout>

5
Ich arbeite nicht, wenn Sie match_parent für Ihre Breite haben.
Ghoti

2
Wenn Sie match_parent für Ihre Breite haben, ist es bereits horizontal zentriert.
Ataulm

103

Sie können CENTER_IN_PARENT für das relative Layout verwenden.

android:layout_centerInParent="true"Zum Element hinzufügen , das Sie im RelativeLayout zentrieren möchten


Das zentriert sich horizontal und veritkal, wie wäre es mit layout_centerHorizontal = true
user3076750

37

Arcadia, probieren Sie einfach den folgenden Code. Es gibt verschiedene Möglichkeiten, um das gewünschte Ergebnis zu erzielen. Dies ist eine der einfacheren Möglichkeiten.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:gravity="center">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"/>
</RelativeLayout>

Das Einstellen der Schwerkraft des RelativeLayout selbst wirkt sich auf alle darin platzierten Objekte aus. In diesem Fall ist es nur der Knopf. Natürlich können Sie hier jede der Schwerkrafteinstellungen verwenden (z. B. center_horizontal, oben, rechts usw.).

Sie können diesen Code auch unten verwenden:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relative_layout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Centered Button"
        android:layout_centerInParent="true"/>
</RelativeLayout>

1
Vielen Dank. Wenn ich jedoch mehrere Tasten hätte und nur eine zentriert haben wollte, wie würde ich das tun? Der erste Code würde alles innerhalb des übergeordneten relativen Layouts zentrieren. Wie könnte ich den Knopf oben in der Reihe zentrieren?
Arcadia

Verwenden Sie einfach das zweite Beispiel und fügen Sie centerInParent nur zu der Schaltfläche hinzu, die Sie zentrieren möchten. Sie können auch centerHorizontal und layout_alignParentTop verwenden, um es nach oben auszurichten und horizontal zu zentrieren. Was genau wollen Sie erreichen, ich kann ein besseres Beispiel geben.
Kevin Coppock

Ich beginne kaum mit meinem Studium der Android-Entwicklung und versuche zu verstehen, wie man Dinge manipuliert, um das zu tun, was ich will. Grundsätzlich möchte ich vermeiden, Dinge mit Pixeln auszurichten, da das Bild auf einem anderen Bildschirmtyp / einer anderen Bildschirmauflösung sehr unterschiedlich aussehen kann. Wenn Sie jedoch den Befehl Schwerkraft verwenden, folgt ihm alles. Ich habe versucht, die Schwerkraft für eine Schaltfläche mithilfe von ignoreGravity zu deaktivieren, aber es hat nicht funktioniert. Dieses Zeug ist sehr knifflig.
Arcadia

Ja, das kann es definitiv sein. Es gibt viele Möglichkeiten, ein bestimmtes Layout zu erstellen. Am besten skizzieren Sie es in Ihrem Kopf, wie Sie es wollen, und gehen Sie von dort aus. Dieses kurze Tutorial kann auch einigen helfen: developer.android.com/resources/tutorials/views/…
Kevin Coppock

Ja, ich habe dieses Tutorial tatsächlich gemacht. Ich gehe jedes der Tutorials durch und lerne, wie man sie vollständig manipuliert, sonst habe ich keine Ahnung, wie jedes anders ist.
Arcadia

25

Zusammengefasst

Hinzufügen:

android:layout_centerInParent="true"

funktioniert nur in RelativeLayout, wenn eines der folgenden Attribute auch für die Ansicht festgelegt ist:

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"

Dadurch wird die untergeordnete Ansicht an der übergeordneten Ansicht ausgerichtet. Das "Zentrum" basiert auf der Achse der von Ihnen gewählten Ausrichtung:

links / rechts -> vertikal

oben / unten -> horizontal

Einstellen der Schwerkraft von Kindern / Inhalten in der Ansicht:

android:gravity="center"

zentriert das Kind in jedem Fall in der übergeordneten Ansicht, wenn keine Ausrichtung festgelegt ist. Optional können Sie wählen:

<!-- Axis to Center -->
android:gravity="center_horizontal"
android:gravity="center_vertical"

<!-- Alignment to set-->
android:gravity="top"
android:gravity="bottom"
android:gravity="left"
android:gravity="right"
android:gravity="fill"
...

Dann ist da:

android:layout_gravity="center"

Dadurch wird die Ansicht selbst in der übergeordneten Ansicht zentriert

Und schließlich können Sie der Elternansicht das folgende Attribut hinzufügen:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

7

Verwenden Sie das Attribut android:centerInParent="true"in einer Ansicht, wenn Sie die Ansicht im relativen Layout zentrieren möchten.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NWE"
        android:textSize="30dp"/>
</RelativeLayout>

5

Es ist einfach, richten Sie es nicht an irgendetwas aus

<Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_centerInParent="true"
        android:text="Centered Button"/>


2

Um die Ausrichtung in einer der Richtungen zu zentrieren, verwenden Sie android: layout_centerHorizontal = "true" oder android: layout_centerVertical = "true" im untergeordneten Layout


1

Das Entfernen von Ausrichtungen wie android: layout_alignParentStart = "true" und das Hinzufügen von centerInParent hat bei mir funktioniert. Wenn das "Ausrichten" erhalten bleibt, funktioniert centerInParent nicht


1

Es ist wirklich einfach. Versuchen Sie den Code unten,

<RelativeLayout
    android:id="@+id/second_RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/first_RL"
    android:background="@android:color/holo_blue_bright"
    android:gravity="center">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</RelativeLayout>

1
Nur-Code-Antworten werden hier nicht begrüßt. Versuchen Sie, weitere Details zu veröffentlichen, warum die obige Antwort funktioniert. :)
Vivz

Danke für die Richtlinie. Ich bin neu hier.
Primesh

0

Sie müssen es links oder rechts von der übergeordneten Ansicht ausgerichtet haben

Verwenden Sie keine dieser Optionen, wenn Sie android:centerInParent="true"Codes verwenden: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

etc.

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.