คุณสามารถตั้งศูนย์กลางของปุ่มใน RelativeLayout ได้หรือไม่?


174

ฉันพยายามจัดปุ่มให้อยู่กึ่งกลางของเลย์เอาท์แบบสัมพัทธ์ ฉันได้ลองใช้ฟังก์ชั่นแรงโน้มถ่วงและทิศทางแล้ว แต่พวกเขาไม่ทำอะไรเลย


1
ภาษา? กรอบ? OS?
Arnold Spence

3
@Arnold Spence: คุณเอาชนะฉันภายใน 24 วินาที :)
Nippysaurus

3
ขออภัยนี่เป็นครั้งแรกที่ฉันใช้ Stack Overflow ใช่ฉันกำลังพัฒนาสำหรับ Android =)
อาร์คาเดีย

7
ไม่มีปัญหา แท็กที่ถูกต้องจะได้รับความสนใจจากคนที่ใช่ที่ถูกต้องเร็วขึ้น แก้ไขแล้ว :)
Arnold Spence

8
+1 ถึง Arnold Spence เพื่อการมีน้ำใจ บางคนใน SO จะทำลาย OP ด้วยวาจาเพราะเพิ่งเป็น "ใหม่"
Subby

คำตอบ:


370

ลอง

android:layout_centerHorizontal="true"

อย่างนี้มันเหมาะกับฉัน:

<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
ฉันไม่ทำงานถ้าคุณมี match_parent สำหรับความกว้างของคุณ
Ghoti

2
หากคุณมี match_parent สำหรับความกว้างของคุณแสดงว่ากึ่งกลางอยู่ในแนวนอนแล้ว
ataulm

103

คุณสามารถใช้ CENTER_IN_PARENT สำหรับเค้าโครงที่สัมพันธ์กัน

เพิ่มandroid:layout_centerInParent="true"องค์ประกอบที่คุณต้องการให้เป็นศูนย์กลางใน RelativeLayout


ที่ศูนย์แนวนอนและ veritcally วิธี 'การแข่งขัน layout_centerHorizontal = true
user3076750

37

อาร์เคเดียเพียงลองใช้รหัสด้านล่าง มีหลายวิธีในการรับผลลัพธ์ที่คุณต้องการซึ่งเป็นหนึ่งในวิธีที่ง่ายกว่า

<?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 นั้นจะส่งผลกระทบต่อวัตถุทั้งหมดที่อยู่ภายใน ในกรณีนี้มันเป็นเพียงปุ่ม คุณสามารถใช้การตั้งค่าแรงโน้มถ่วงใด ๆ ได้ที่นี่แน่นอน (เช่น center_horizontal, ด้านบน, ด้านขวาและอื่น ๆ )

คุณสามารถใช้รหัสนี้ด้านล่าง:

<?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
ขอบคุณ อย่างไรก็ตามหากฉันมีปุ่มหลายปุ่มและต้องการเพียงปุ่มเดียวที่อยู่ตรงกลางฉันจะทำอย่างไร รหัสแรกจะศูนย์กลางทุกอย่างภายในแม่ relativelayout นอกจากนี้ฉันจะจัดตำแหน่งปุ่มที่ด้านบนสุดของแถวได้อย่างไร
อาร์เคเดีย

เพียงใช้ตัวอย่างที่สองและเพิ่ม centerInParent ให้กับปุ่มที่คุณต้องการให้อยู่กึ่งกลางเท่านั้น นอกจากนี้คุณยังสามารถใช้ centerH horizontal และ layout_alignParentTop เพื่อจัดแนวไปที่ด้านบนและจัดกึ่งกลางแนวนอน คุณพยายามทำอะไรให้สำเร็จฉันอาจยกตัวอย่างที่ดีกว่าได้
Kevin Coppock

ฉันเพิ่งเริ่มศึกษาการพัฒนา Android และพยายามเข้าใจวิธีจัดการกับสิ่งที่ฉันต้องการ โดยทั่วไปฉันต้องการหลีกเลี่ยงการจัดตำแหน่งสิ่งต่าง ๆ ด้วยพิกเซลเนื่องจากรูปภาพอาจดูแตกต่างกันมากในประเภท / ความละเอียดหน้าจอที่แตกต่างกัน อย่างไรก็ตามเมื่อคุณใช้คำสั่งแรงโน้มถ่วงทุกอย่างจะตามมา ฉันพยายามปิดการใช้งานปุ่มสำหรับแรงโน้มถ่วงโดยใช้ ignGravity และมันไม่ทำงาน สิ่งนี้เป็นเรื่องยุ่งยากมาก
อาร์เคเดีย

ใช่มันสามารถเป็นอย่างแน่นอน มีวิธีมากมายในการทำเค้าโครงเฉพาะ วิธีที่ดีที่สุดคือจัดเรียงร่างมันออกมาในหัวของคุณว่าคุณต้องการมันอย่างไรและไปจากที่นั่น บทแนะนำฉบับย่อนี้อาจช่วยได้เช่นกัน: developer.android.com/resources/tutorials/views/…
Kevin Coppock

ใช่ฉันกำลังทำกวดวิชานั้นจริง ๆ ฉันจะผ่านแต่ละบทช่วยสอนและเรียนรู้วิธีจัดการกับมันอย่างสมบูรณ์มิฉะนั้นฉันจะไม่เข้าใจว่าแต่ละตัวมีความแตกต่างกันอย่างไร
อาร์เคเดีย

25

สรุป

เพิ่ม:

android:layout_centerInParent="true"

ใช้งานได้กับ RelativeLayout หากหนึ่งในคุณลักษณะต่อไปนี้ถูกตั้งค่าสำหรับมุมมอง:

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

ซึ่งจัดแนวมุมมองชายด์กับมุมมองพาเรนต์ "ศูนย์กลาง" ขึ้นอยู่กับแกนของการจัดตำแหน่งที่คุณเลือก:

ซ้าย / ขวา -> แนวตั้ง

บน / ล่าง -> แนวนอน

การตั้งค่าแรงโน้มถ่วงของเด็ก / เนื้อหาภายในมุมมอง:

android:gravity="center"

กำลังจัดกึ่งกลางเด็กไว้ในมุมมองพาเรนต์ในกรณีใด ๆ หากไม่มีชุดการจัดแนว ตัวเลือกที่คุณสามารถเลือกได้:

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

จากนั้นมี:

android:layout_gravity="center"

ซึ่งจัดกึ่งกลางมุมมองภายในตัวมันเอง

และในที่สุดคุณสามารถเพิ่มแอททริบิวต่อไปนี้ลงในมุมมองพาเรนต์:

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

7

ใช้แอททริบิวandroid:centerInParent="true"ภายในมุมมองเมื่อคุณต้องการจัดมุมมองให้อยู่กึ่งกลางในเลย์เอาต์ที่สัมพันธ์กัน

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


2

ในการจัดตำแหน่งกึ่งกลางในทิศทางใดทิศทางหนึ่งให้ใช้ android: layout_centerHorizontal = "true" หรือ android: layout_centerVertical = "true" ในเค้าโครงลูก


1

การลบการจัดตำแหน่งใด ๆ เช่น android: layout_alignParentStart = "true" และการเพิ่ม centerInParent ทำงานให้ฉัน หาก "จัดตำแหน่ง" ยังคงอยู่ centerInParent จะไม่ทำงาน


1

มันง่ายมาก ลองรหัสด้านล่าง

<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
คำตอบของรหัสเท่านั้นไม่ได้รับการต้อนรับที่นี่ ลองโพสต์รายละเอียดเพิ่มเติมว่าทำไมคำตอบข้างต้นถึงได้ผล :)
Vivz

ขอบคุณสำหรับแนวทาง ฉันใหม่ที่นี่
Primesh

0

คุณต้องจัดแนวให้ชิดซ้ายหรือขวาของมุมมองพาเรนต์

อย่าใช้สิ่งเหล่านี้เมื่อใช้ android:centerInParent="true"รหัส: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

เป็นต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.