Android - Center TextView แนวนอนใน LinearLayout


111

ฉันมีเค้าโครงพื้นฐานดังต่อไปนี้

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

ดูเหมือนว่า xml จะถูกต้อง แต่ข้อความจัดชิดซ้าย textview ใช้ความกว้างทั้งหมดของพาเรนต์และ textview ถูกตั้งค่าให้อยู่กึ่งกลาง ไม่แน่ใจว่าเป็นปัญหาอะไร ...


2
ลองใช้ android: แรงโน้มถ่วง = "center" สำหรับ textview ของคุณ
user370305

คำตอบ:


227

สิ่งที่เกิดขึ้นคือเนื่องจาก TextView กำลังเติมความกว้างทั้งหมดของ LinearLayout ด้านในจึงอยู่ตรงกลางแนวนอนของเค้าโครงแล้ว เมื่อคุณใช้android:layout_gravityวิดเจ็ตจะวางวิดเจ็ตโดยรวมในแรงโน้มถ่วงที่ระบุ แทนที่จะวางศูนย์วิดเจ็ตทั้งหมดสิ่งที่คุณพยายามทำจริงๆคือวางเนื้อหาไว้ตรงกลางซึ่งสามารถทำได้android:gravity="center_horizontal"และandroid:layout_gravityสามารถลบแอตทริบิวต์ได้


3
ถ้าฉันเข้าใจถูกต้องเขาสามารถเปลี่ยน "android: layout_width =" fill_parent "เป็น" wrap_content "จากนั้นใช้ android: layout_gravity =" center_horizontal "ฉันพูดถูกไหม
Paul Brewczynski

1
@bluesm ไม่ LinearLayout ด้านในไม่อนุญาตให้ตัวเองมีพื้นที่ว่างที่ไม่เต็มไปด้วย View (ไม่ได้พิจารณากรณีของ LinearLayout ที่ว่างเปล่า) ดังนั้นandroid:layout_widthพินัยกรรมจึงมีค่าเท่ากัน (หลังเค้าโครง) เนื่องจากความกว้างของ TextView เท่ากับการที่มีของ LinearLayout ภายใน TextView ได้อย่างมีประสิทธิภาพมีandroid:layout_gravityค่าleft, rightและcenterในเวลาเดียวกัน
Dan S

1
สำหรับImageViewมันlayout_gravityและสำหรับTextViewมันgravityคือสิ่งที่ใช้งานได้เท่านั้น Android ดีมาก! ขอบคุณโพสต์ SO ที่สวยงามทั้งหมดโดยที่การพัฒนาเป็นไปไม่ได้เลย
Atul

1
อย่าลืม 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

หากคุณตั้ง<TextView>อยู่ตรงกลาง<Linearlayout>ก่อนอื่นให้android:layout_width="fill_parent"บังคับ
ไม่ต้องใช้แรงโน้มถ่วงอื่นใด

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


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