Bisakah Anda memusatkan Tombol di RelativeLayout?


174

Saya mencoba memusatkan tombol di tata letak relatif, apakah ini mungkin? Saya sudah mencoba fungsi Gravity dan Orientation tetapi mereka tidak melakukan apa-apa.


1
Bahasa? Kerangka? OS?
Arnold Spence

3
@Arnold Spence: Anda mengalahkan saya 24 detik :)
Nippysaurus

3
Maaf, ini pertama kalinya saya menggunakan Stack Overflow. Ya saya sedang mengembangkan untuk Android. =)
Arcadia

7
Tidak masalah. Tag yang tepat akan mendapatkan perhatian dari poeple kanan lebih cepat. Diperbaiki :)
Arnold Spence

8
+1 ke Arnold Spence untuk menjadi perhatian. Beberapa orang di SO akan secara verbal menghancurkan OP hanya karena "baru".
Subby

Jawaban:


370

Mencoba

android:layout_centerHorizontal="true"

Persis seperti ini, ini berfungsi untuk saya:

<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
Saya tidak bekerja jika Anda memiliki match_parent untuk lebar Anda.
Ghoti

2
Jika Anda memiliki match_parent untuk lebar Anda, itu sudah terpusat secara horizontal.
ataulm

103

Anda dapat menggunakan CENTER_IN_PARENT untuk tata letak relatif.

Tambahkan android:layout_centerInParent="true"ke elemen yang ingin Anda pusatkan di RelativeLayout


Itu berpusat secara horizontal dan verbal, bagaimana 'tentang layout_centerHorizontal = true
user3076750

37

Arcadia, coba saja kode di bawah ini. Ada beberapa cara untuk mendapatkan hasil yang Anda cari, ini adalah salah satu cara yang lebih mudah.

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

Mengatur gravitasi dari RelativeLayout itu sendiri akan mempengaruhi semua objek yang ditempatkan di dalamnya. Dalam hal ini, hanya tombolnya. Anda dapat menggunakan salah satu pengaturan gravitasi di sini, tentu saja (misalnya center_horizontal, atas, kanan, dan sebagainya).

Anda juga dapat menggunakan kode ini di bawah:

<?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
Terima kasih. Namun, jika saya memiliki beberapa tombol dan hanya ingin satu yang terpusat, bagaimana saya melakukannya? Kode pertama akan memusatkan segala sesuatu di dalam relativelayout induk. Juga, bagaimana saya bisa memusatkan tombol di bagian atas baris itu?
Arcadia

Cukup gunakan contoh kedua, dan hanya tambahkan centerInParent ke tombol yang Anda inginkan terpusat. Anda juga dapat menggunakan centerHorizontal, dan layout_alignParentTop untuk menyelaraskannya ke atas dan memusatkannya secara horizontal. Apa sebenarnya yang ingin Anda capai, saya mungkin bisa memberikan contoh yang lebih baik.
Kevin Coppock

Saya baru saja memulai studi saya tentang pengembangan android dan mencoba untuk sepenuhnya memahami bagaimana memanipulasi hal-hal untuk melakukan apa yang saya inginkan. Pada dasarnya saya ingin menjauh dari menyelaraskan hal-hal dengan piksel karena gambar bisa terlihat sangat berbeda pada jenis layar / resolusi yang berbeda. Namun, ketika Anda menggunakan perintah gravitasi, semuanya mengikutinya. Saya mencoba menonaktifkan gravitasi untuk tombol dengan menggunakan AbaikanGravity dan itu tidak berhasil. Barang ini sangat rumit.
Arcadia

Ya, pasti bisa. Ada banyak cara untuk melakukan tata letak tertentu. Cara terbaik adalah memilah sketsa di kepala Anda seperti yang Anda inginkan, dan pergi dari sana. Tutorial singkat ini juga dapat membantu beberapa: developer.android.com/resources/tutorials/views/…
Kevin Coppock

Ya saya benar-benar melakukan tutorial itu. Saya akan mempelajari masing-masing tutorial dan belajar bagaimana memanipulasi mereka sepenuhnya, kalau tidak saya tidak akan mengerti bagaimana masing-masing berbeda.
Arcadia

25

Diringkas

Menambahkan:

android:layout_centerInParent="true"

hanya berfungsi di RelativeLayout, jika salah satu dari atribut berikut juga disetel untuk tampilan:

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

yang menyelaraskan tampilan anak ke tampilan induk. "Tengah" didasarkan pada sumbu pelurusan yang telah Anda pilih:

kiri / kanan -> vertikal

atas / bawah -> horisontal

Mengatur gravitasi anak / konten di dalam tampilan:

android:gravity="center"

memusatkan anak di dalam tampilan induk dalam hal apa pun, jika tidak ada perataan yang ditetapkan. Opsional Anda dapat memilih:

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

Lalu ada:

android:layout_gravity="center"

yang memusatkan pandangan itu sendiri di dalam orang tua itu

Dan akhirnya Anda dapat menambahkan atribut berikut ke tampilan orang tua:

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

7

Gunakan atribut android:centerInParent="true"di dalam tampilan, saat Anda ingin memusatkan tampilan dalam tata letak Relatif.

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

Mudah, jangan selaraskan dengan apa pun

<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

Untuk memusatkan menyelaraskan di salah satu arah gunakan android: layout_centerHorizontal = "true" atau android: layout_centerVertical = "true" di tata letak anak


1

Menghapus semua penyelarasan seperti android: layout_alignParentStart = "true" dan menambahkan centerInParent bekerja untuk saya. Jika "sejajarkan" tetap, centerInParent tidak berfungsi


1

Sangat mudah. Coba kode di bawah ini,

<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
Kode hanya jawaban tidak disambut di sini. Cobalah untuk memposting detail lebih lanjut mengapa jawaban di atas akan berfungsi. :)
Vivz

Terima kasih untuk panduannya. Saya baru di sini.
Primesh

0

Anda harus menyelaraskannya ke kiri atau kanan tampilan induk

jangan gunakan ini saat menggunakan android:centerInParent="true"kode: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

dll.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.