Android - Chế độ xem văn bản ở giữa theo chiều ngang trong LinearLayout


111

Tôi có bố cục cơ bản sau

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/title_bar_background">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:padding="10dp"
        android:text="HELLO WORLD" />

    </LinearLayout>
<LinearLayout>

Có vẻ như xml là đúng nhưng văn bản được căn chỉnh ở bên trái. Chế độ xem văn bản chiếm toàn bộ chiều rộng của chế độ xem chính và chế độ xem văn bản được đặt thành căn giữa. Không chắc vấn đề là gì...


2
hãy thử android :vity = "center" cho textview của bạn
user370305

Câu trả lời:


227

Điều đang xảy ra là vì TextView đang lấp đầy toàn bộ chiều rộng của LinearLayout bên trong, nó đã nằm ở trung tâm ngang của bố cục . Khi bạn sử dụng android:layout_gravitynó, tổng thể tiện ích sẽ nằm trong trọng lực được chỉ định. Thay vì đặt toàn bộ trung tâm tiện ích, những gì bạn thực sự đang cố gắng làm là đặt nội dung ở trung tâm có thể hoàn thành android:gravity="center_horizontal"android:layout_gravitythuộc tính có thể bị xóa.


3
Nếu tôi hiểu chính xác, anh ấy có thể thay đổi "android: layout_width =" fill_parent "thành" wrap_content "và sau đó sử dụng android: layout_gravity =" center_horizontal ". Tôi nói đúng chứ?
Paul Brewczynski

1
@bluesm Không, LinearLayout bên trong không cho phép chính nó có khoảng trống không được lấp đầy bởi Chế độ xem (không tính đến trường hợp LinearLayout trống). Như vậy di android:layout_widthchúc có giá trị như nhau (sau khi bố trí). Kể từ chiều rộng của TextView bằng với của LinearLayout bên trong TextView có hiệu quả có android:layout_gravitygiá trị left, rightcentercùng một lúc.
Dan S

1
Đối với ImageViewlayout_gravityvà đối với TextViewgravitylà những gì chỉ hoạt động. Android thật tuyệt vời! Cảm ơn tất cả các bài viết SO đẹp đẽ mà không có sự phát triển đó là không thể.
Atul

1
đừng quên về android:layout_width="match_parent"
Choletski

24
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_bar_background">

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:padding="10dp"
    android:text="HELLO WORLD" />

</LinearLayout>


24

Nếu bạn đặt <TextView>ở trung tâm <Linearlayout>thì trước tiên hãy đặt android:layout_width="fill_parent"bắt buộc
Không cần sử dụng bất kỳ trọng lực nào khác

    <LinearLayout
            android:layout_toRightOf="@+id/linear_profile" 
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:orientation="vertical"
            android:gravity="center_horizontal">
            <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="It's.hhhhhhhh...."
                android:textColor="@color/Black"

                />
    </LinearLayout>

16

Sử dụng android:gravity="center"trong TextViewthay vì layout_gravity.


Câu trả lời ngắn gọn và chính xác. Cảm ơn bạn
nurnachman

4

Chỉ cần sử dụng: android: layout_centerHorizontal = "true"

Nó sẽ đặt toàn bộ textview ở trung tâm

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.