Bạn có thể tập trung vào một nút trong RelativeLayout không?


174

Tôi đang cố gắng tập trung vào một nút trong bố cục tương đối, điều này có thể không? Tôi đã thử các chức năng Trọng lực và Định hướng nhưng chúng không làm gì cả.


1
Ngôn ngữ? Khung? HĐH?
Arnold Spence

3
@Arnold Spence: bạn đã đánh bại tôi sau 24 giây :)
Nippysaurus

3
Xin lỗi, đây là lần đầu tiên tôi sử dụng Stack Overflow. Có, tôi đang phát triển cho Android. =)
Arcadia

7
Không thành vẫn đề. Các thẻ bên phải sẽ nhận được sự chú ý của poeple bên phải nhanh hơn. Đã sửa :)
Arnold Spence

8
+1 cho Arnold Spence vì chu đáo. Một số người trên SO sẽ phá hủy OP bằng lời nói chỉ vì "mới".
Subby

Câu trả lời:


370

Thử

android:layout_centerHorizontal="true"

Chính xác như thế này, nó hoạt động với tôi:

<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
Tôi không làm việc nếu bạn có match_parent cho chiều rộng của bạn.
Ghoti

2
Nếu bạn có match_parent cho chiều rộng của mình, thì nó đã được căn giữa theo chiều ngang.
ataulm

103

Bạn có thể sử dụng CENTER_IN_PARENT cho bố cục tương đối.

Thêm android:layout_centerInParent="true"vào yếu tố mà bạn muốn tập trung vào RelativeLayout


Đó là trung tâm theo chiều ngang và bằng lời nói, làm thế nào 'bout layout_centerHTHER = true
user3076750

37

Arcadia, chỉ cần thử mã dưới đây. Có một số cách để có được kết quả mà bạn đang tìm kiếm, đây là một trong những cách dễ dàng hơn.

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

Đặt trọng lực của RelativeLayout sẽ ảnh hưởng đến tất cả các đối tượng được đặt bên trong nó. Trong trường hợp này, nó chỉ là nút. Tất nhiên, bạn có thể sử dụng bất kỳ cài đặt trọng lực nào ở đây (ví dụ: centre_horizontal, trên cùng, bên phải, v.v.).

Bạn cũng có thể sử dụng mã này dưới đây:

<?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
Cảm ơn. Tuy nhiên, nếu tôi có nhiều nút và chỉ muốn một nút ở giữa thì tôi sẽ làm thế nào? Mã đầu tiên sẽ tập trung mọi thứ trong phạm vi tương ứng cha mẹ. Ngoài ra, làm cách nào tôi có thể căn giữa nút ở đầu hàng?
Arcadia

Chỉ cần sử dụng ví dụ thứ hai và chỉ thêm centreInParent vào nút mà bạn muốn làm trung tâm. Bạn cũng có thể sử dụng centreHTHER và layout_alignParentTop để căn chỉnh nó lên trên cùng và căn giữa nó theo chiều ngang. Chính xác những gì bạn đang cố gắng để đạt được, tôi có thể đưa ra một ví dụ tốt hơn.
Kevin Coppock

Tôi mới bắt đầu nghiên cứu về phát triển Android và cố gắng hiểu đầy đủ cách thao tác mọi thứ để làm những gì tôi muốn. Về cơ bản, tôi muốn tránh xa việc sắp xếp mọi thứ với pixel bởi vì hình ảnh có thể trông rất khác nhau trên một loại / độ phân giải màn hình khác nhau. Tuy nhiên, khi bạn sử dụng lệnh trọng lực, mọi thứ đều tuân theo nó. Tôi đã thử vô hiệu hóa trọng lực cho một nút bằng cách sử dụng ignGravity và nó không hoạt động. Công cụ này là rất khó khăn.
Arcadia

Vâng, nó chắc chắn có thể. Có rất nhiều cách để làm bất kỳ bố trí cụ thể. Cách tốt nhất là sắp xếp phác thảo nó ra trong đầu bạn như thế nào bạn muốn nó, và đi từ đó. Hướng dẫn nhanh này cũng có thể giúp một số người: developer.android.com/resource/tutorials/view/
mẹo

Vâng, tôi đã thực sự làm hướng dẫn đó. Tôi đang xem qua từng hướng dẫn và học cách thao tác hoàn toàn với chúng, nếu không tôi sẽ không nắm bắt được cách mỗi người khác nhau.
Arcadia

25

Tóm tắt

Thêm:

android:layout_centerInParent="true"

chỉ hoạt động trên RelativeLayout, nếu một trong các thuộc tính sau cũng được đặt cho chế độ xem:

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

mà điều chỉnh khung nhìn con với khung nhìn cha mẹ. "Trung tâm" dựa trên trục của sự sắp xếp mà bạn đã chọn:

trái / phải -> dọc

trên / dưới -> ngang

Đặt trọng lực của trẻ em / nội dung trong chế độ xem:

android:gravity="center"

đang định tâm đứa trẻ bên trong khung nhìn cha mẹ trong mọi trường hợp, nếu không có bộ căn chỉnh. Tùy chọn bạn có thể chọn:

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

Sau đó có:

android:layout_gravity="center"

đó là trung tâm của chính khung cảnh bên trong nó

Và cuối cùng, bạn có thể thêm thuộc tính sau vào chế độ xem cha mẹ:

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

7

Sử dụng thuộc tính android:centerInParent="true"bên trong một khung nhìn, khi bạn muốn định tâm khung nhìn trong bố cục tương đối.

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

Thật dễ dàng, không căn chỉnh nó với bất cứ điều gì

<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

Để căn giữa căn chỉnh theo một trong các hướng, hãy sử dụng android: layout_centerHTHER = "true" hoặc android: layout_centerV vertical = "true" trong bố cục con


1

Xóa mọi liên kết như android: layout_alignParentStart = "true" và thêm centreInParent làm việc cho tôi. Nếu "căn chỉnh" vẫn ở trong, centreInarar không hoạt động


1

Nó thực sự dễ dàng. Hãy thử mã dưới đây,

<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
Mã chỉ trả lời không được hoan nghênh ở đây. Cố gắng đăng thêm chi tiết về lý do tại sao câu trả lời trên sẽ hoạt động. :)
Vivz

Cảm ơn đã hướng dẫn. Tôi mới ở đây.
Primesh

0

bạn phải căn chỉnh nó sang trái hoặc phải của chế độ xem cha mẹ

không sử dụng bất kỳ thứ nào trong số này khi sử dụng android:centerInParent="true"mã: -

android:layout_alignParentLeft="true"

android:layout_alignParentLeft="true"

android:layout_alignRight=""

Vân vân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.