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.