Bir Düğme'yi RelativeLayout'ta ortalayabilir misiniz?


174

Bir düğmeyi göreceli düzende ortalamaya çalışıyorum, bu mümkün mü? Yerçekimi ve Yönlendirme işlevlerini denedim ama hiçbir şey yapmıyorlar.


1
Dil? Çerçeve? İŞLETİM SİSTEMİ?
Arnold Spence

3
@Arnold Spence: 24 saniye beni
dövüyorsun

3
Üzgünüm, bu benim ilk kez Stack Overflow kullanıyor. Evet, Android için geliştiriyorum. =)
Arcadia

7
Sorun yok. Doğru etiketler, doğru kişinin dikkatini daha hızlı alır. Düzeltildi :)
Arnold Spence

8
Arnold Spence'e düşünceli olduğu için +1. SO'daki bazı insanlar OP'yi sadece "yeni" oldukları için sözlü olarak yok ederdi.
Subby

Yanıtlar:


370

Deneyin

android:layout_centerHorizontal="true"

Aynen böyle, benim için çalışıyor:

<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
Genişliğiniz için match_parent varsa çalışmaz.
Ghoti

2
Genişliğiniz için match_parent varsa, yatay olarak zaten ortalanmıştır.
ataulm

103

Göreli düzen için CENTER_IN_PARENT kullanabilirsiniz.

android:layout_centerInParent="true"RelativeLayout'ta ortalamak istediğiniz öğeye ekleyin


Bu yatay ve dikey olarak merkezlenir, nasıl 'bout layout_centerHorizontal = true
user3076750

37

Arcadia, sadece aşağıdaki kodu deneyin. Aradığınız sonucu almanın birkaç yolu vardır, bu daha kolay yollardan biridir.

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

RelativeLayout'un yerçekiminin ayarlanması, içine yerleştirilen tüm nesneleri etkileyecektir. Bu durumda, sadece düğme. Elbette burada yerçekimi ayarlarından herhangi birini kullanabilirsiniz (örn. Center_horizontal, top, right, vb.).

Bu kodu aşağıda da kullanabilirsiniz:

<?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
Teşekkürler. Ancak, birden fazla düğmem vardı ve yalnızca bir tane ortalansaydım bunu nasıl yapardım? İlk kod, her şeyi üst göreli içerik içinde ortalar. Ayrıca, düğmeyi satırının üst kısmına nasıl ortalayabilirim?
Arcadia

Sadece ikinci örneği kullanın ve sadece ortalamak istediğiniz düğmeye centerInParent ekleyin. Ayrıca, üste hizalamak ve yatay olarak ortalamak için centerHorizontal ve layout_alignParentTop öğelerini kullanabilirsiniz. Tam olarak neyi başarmaya çalışıyorsunuz, daha iyi bir örnek verebilirim.
Kevin Coppock

Android geliştirme çalışmalarına zar zor başlıyorum ve istediğimi yapmak için işleri nasıl manipüle edeceğimizi tam olarak anlamaya çalışıyorum. Temelde, şeyleri piksellerle hizalamaktan uzak durmak istiyorum çünkü resim farklı bir ekran türünde / çözünürlüğünde çok farklı görünebilir. Ancak, yerçekimi komutunu kullandığınızda, her şey onu takip eder. İgnoreGravity kullanarak bir düğme için yerçekimini devre dışı bırakmayı denedim ve işe yaramadı. Bu şeyler çok zor.
Arcadia

Evet, kesinlikle olabilir. Herhangi bir düzeni yapmanın birçok yolu vardır. En iyi yol, kafanızda nasıl istediğinizi çizmek ve oradan gitmek. Bu hızlı eğitim bazılarına da yardımcı olabilir: developer.android.com/resources/tutorials/views/…
Kevin Coppock

Evet aslında bu öğreticiyi yapıyordum. Öğreticilerin her birini inceliyorum ve bunları tamamen nasıl manipüle edeceğimizi öğreniyorum, aksi takdirde her birinin nasıl farklı olduğunu kavramayacağım.
Arcadia

25

özetlenebilir

Ekleme:

android:layout_centerInParent="true"

görünüm için aşağıdaki özniteliklerden biri de ayarlanmışsa, RelativeLayout'ta çalışır:

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

alt görünümü üst görünüme hizalar. "Merkez", seçtiğiniz hizalamanın eksenini temel alır:

sol / sağ -> dikey

üst / alt -> yatay

Çocukların / içeriğin yerçekimini görünüm içinde ayarlama:

android:gravity="center"

ayarlanmamışsa her durumda alt öğeyi ana görünümde ortalar. İsteğe bağlı olarak aşağıdakileri seçebilirsiniz:

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

Sonra var:

android:layout_gravity="center"

görünümün kendisini ana içinde ortalar

Ve sonunda ebeveynler görünümüne aşağıdaki özelliği ekleyebilirsiniz:

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

7

android:centerInParent="true"Görünümü Göreceli mizanpajda ortalamak istediğinizde, görünümün içindeki özelliği kullanın .

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

Kolay, hiçbir şeye hizalamayın

<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

Yönlerden birinde ortala hizalamak için çocuk düzeninde android: layout_centerHorizontal = "true" veya android: layout_centerVertical = "true" kullanın


1

Android gibi herhangi bir hizalamayı kaldırmak: layout_alignParentStart = "true" ve centerInParent eklemek benim için çalıştı. "Hizala" kalırsa, centerInParent çalışmaz


1

Gerçekten çok kolay. Aşağıdaki kodu deneyin,

<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
Burada yalnızca kod yanıtları kabul edilmez. Yukarıdaki cevabın neden işe yarayacağına dair daha fazla ayrıntı göndermeye çalışın. :)
Vivz

Kılavuz için teşekkürler. Burada yeniyim.
Primesh

0

üst görünümün soluna veya sağına hizalamış olmanız gerekir

android:centerInParent="true"kodları kullanırken bunlardan hiçbirini kullanmayın : -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

vb.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.