Puoi centrare un pulsante in RelativeLayout?


174

Sto cercando di centrare un pulsante nel layout relativo, è possibile? Ho provato le funzioni Gravità e Orientamento ma non fanno nulla.


1
Linguaggio? Struttura? OS?
Arnold Spence,

3
@Arnold Spence: mi hai battuto per 24 secondi :)
Nippysaurus,

3
Siamo spiacenti, questa è la prima volta che utilizzo Stack Overflow. Sì, sto sviluppando per Android. =)
Arcadia,

7
Nessun problema. I tag giusti attireranno più rapidamente l'attenzione del giusto popolo. Risolto :)
Arnold Spence il

8
+1 a Arnold Spence per essere premuroso. Alcune persone su SO avrebbero distrutto verbalmente l'OP solo per essere "nuovo".
Subby,

Risposte:


370

Provare

android:layout_centerHorizontal="true"

Esattamente così, funziona per me:

<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
Non lavoro se hai match_parent per la tua larghezza.
Ghoti,

2
Se hai match_parent per la tua larghezza, è già centrato orizzontalmente.
ataulm,

103

Puoi utilizzare CENTER_IN_PARENT per il layout relativo.

Aggiungi android:layout_centerInParent="true"all'elemento che vuoi centrare in RelativeLayout


Che centra in senso orizzontale e verticale, che ne dici di layout_centerHorizontal = true
user3076750

37

Arcadia, prova il codice qui sotto. Esistono diversi modi per ottenere il risultato che stai cercando, questo è uno dei modi più semplici.

<?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>

L'impostazione della gravità del RelativeLayout stesso influenzerà tutti gli oggetti posti al suo interno. In questo caso, è solo il pulsante. Ovviamente puoi utilizzare qualsiasi impostazione di gravità qui (ad es. Center_horizontal, in alto, a destra e così via).

Puoi anche usare questo codice qui sotto:

<?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
Grazie. Tuttavia, se avessi più pulsanti e ne volessi solo uno centrato, come potrei farlo? Il primo codice dovrebbe centrare tutto all'interno del relativo rapporto parentale. Inoltre, come potrei centrare il pulsante nella parte superiore della riga?
Arcadia,

Basta usare il secondo esempio e aggiungere centerInParent solo al pulsante che si desidera centrare. Puoi anche usare centerHorizontal e layout_alignParentTop per allinearlo in alto e centrarlo in orizzontale. Che cosa stai esattamente cercando di ottenere, potrei dare un esempio migliore.
Kevin Coppock,

Sto appena iniziando i miei studi sullo sviluppo di Android e sto cercando di comprendere appieno come manipolare le cose per fare quello che voglio. Fondamentalmente voglio stare lontano dall'allineare le cose con i pixel perché l'immagine potrebbe apparire molto diversa su un diverso tipo di schermo / risoluzione. Tuttavia, quando si utilizza il comando di gravità, tutto lo segue. Ho provato a disabilitare la gravità per un pulsante usando ignoreGravity e non ha funzionato. Questa roba è molto complicata.
Arcadia,

Sì, sicuramente può essere. Esistono molti modi per eseguire qualsiasi layout particolare. Il modo migliore è di disegnarlo nella tua testa come lo desideri e andare da lì. Anche questo breve tutorial può essere d'aiuto: developer.android.com/resources/tutorials/views/…
Kevin Coppock,

Sì, stavo davvero facendo quel tutorial. Sto esaminando ciascuno dei tutorial e sto imparando come manipolarli completamente, altrimenti non avrò una comprensione di come ognuno è diverso.
Arcadia,

25

riassunto

Aggiunta:

android:layout_centerInParent="true"

funziona solo su RelativeLayout, se per la vista è impostato anche uno dei seguenti attributi:

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

che allinea la vista figlio alla vista padre. Il "centro" si basa sull'asse dell'allineamento che hai scelto:

sinistra / destra -> verticale

alto / basso -> orizzontale

Impostazione della gravità dei bambini / contenuti all'interno della vista:

android:gravity="center"

centra comunque il figlio all'interno della vista padre, se non è stato impostato alcun allineamento. Opzionale puoi scegliere:

<!-- 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"
...

Poi c'è:

android:layout_gravity="center"

che sta centrando la vista stessa all'interno del suo genitore

E infine puoi aggiungere il seguente attributo alla vista genitori:

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

7

Utilizzare l'attributo android:centerInParent="true"all'interno di una vista per centrare la vista nel layout relativo.

<?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

È facile, non allinearlo a nulla

<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

Per allineare al centro in una delle direzioni usa android: layout_centerHorizontal = "true" o android: layout_centerVertical = "true" nel layout figlio


1

Rimozione di qualsiasi allineamento come Android: layout_alignParentStart = "true" e l'aggiunta di centerInParent ha funzionato per me. Se "align" rimane attivo, centerInParent non funziona


1

È davvero facile Prova il codice qui sotto,

<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
Le risposte solo al codice non sono le benvenute qui. Prova a pubblicare maggiori dettagli sul perché la risposta sopra funzionerà. :)
Vivz,

Grazie per la guida. Sono nuovo qui.
Primesh,

0

devi averlo allineato a sinistra o a destra della vista padre

non usare nessuno di questi quando si usano i android:centerInParent="true"codici: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

eccetera.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.