Làm thế nào để tập trung nội dung bên trong một bố cục tuyến tính?


155

Tôi đang cố gắng tập trung ImageViewvào bên trong LinearLayouttheo chiều ngang và chiều dọc, nhưng tôi không thể làm được. Lý do chính tại sao tôi không sử dụng RelativeLayoutvì đó là vì tôi cần layout_weight( Activitybao gồm bốn cột nên được chia đều và cũng đáp ứng với độ rộng màn hình khác nhau, mỗi cột có một ImageViewtrung tâm và không được kéo dài).

Đây là xml của tôi cho đến nay:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:baselineAligned="false"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_speak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_speak" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_readtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_readtext" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_edit" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_config"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_config" />
    </LinearLayout>
</LinearLayout>

đăng ảnh chụp màn hình như bạn muốn và ảnh chụp màn hình hiện tại
Yogesh Tatwal

Câu trả lời:


381

android:gravity xử lý sự liên kết của con cái của nó,

android:layout_gravity xử lý sự liên kết của chính nó.

Vì vậy, sử dụng một trong những.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:baselineAligned="false"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" >

        <ImageView
            android:id="@+id/imageButton_speak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_speak" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center" >

        <ImageView
            android:id="@+id/imageButton_readtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_readtext" />
    </LinearLayout>

    ...
</LinearLayout>

hoặc là

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:baselineAligned="false"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".Main" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_speak"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_speak" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageButton_readtext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@drawable/image_bg"
            android:src="@drawable/ic_readtext" />
    </LinearLayout>

    ...
</LinearLayout>

"android: layout_gravity tự chăm sóc bản thân." sẽ sửa đổi để nói trọng lực bố trí được sử dụng bởi cha mẹ.
ataulm

36

android:layout_gravity được sử dụng cho chính bố cục

Sử dụng android:gravity="center"cho trẻ em của bạnLinearLayout

Vì vậy, mã của bạn phải là:

<LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="1" >

7

Tôi đã thử các giải pháp được đề cập ở đây nhưng nó không giúp tôi. Tôi nhớ giải pháp là layout_widthphải sử dụng wrap_contentnhư giá trị.

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_weight="1" >

5

Đây là một số mã mẫu. Điều này làm việc cho tôi.

<LinearLayout
    android:gravity="center"
    >
    <TextView
        android:layout_gravity="center"
        />
    <Button
        android:layout_gravity="center"
        />
</LinearLayout>

Vì vậy, bạn đang thiết kế Bố cục tuyến tính để đặt tất cả nội dung của nó (TextView và Nút) vào trung tâm của nó, và sau đó TextView và Nút được đặt tương đối với trung tâm của Bố cục tuyến tính.


1
đơn giản. Thuộc tính 'trọng lực' ảnh hưởng đến nội dung của chế độ xem. Vậy trong trường hợp này, nội dung của linearLayout là gì? Một TextView và một nút. Thực tế, bạn đang hướng dẫn Trình quản lý bố cục tập trung mọi nội dung của Bố cục tuyến tính.
pcodex 27/03/18

2

android:gravity có thể được sử dụng trên Bố cục để căn chỉnh con của nó.

android:layout_gravity có thể được sử dụng trên bất kỳ khung nhìn nào để căn chỉnh chính nó trong cha mẹ của nó.

LƯU Ý: Nếu bản thân hoặc trẻ em không tập trung như mong đợi, hãy kiểm tra xem chiều rộng / chiều cao có match_parentvà thay đổi thành thứ khác không

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.