Android - LinearLayout'ta TextView Yatay Olarak Ortala


111

Aşağıdaki temel düzene sahibim

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

Görünüşe göre xml doğru ama metin sola hizalı. Metin görünümü, üst öğenin tüm genişliğini kaplar ve metin görünümü ortalanacak şekilde ayarlanır. Sorunun ne olduğundan emin değilim ...


2
android: gravity = "center"
metin

Yanıtlar:


227

Olan şey şu ki, TextView iç LinearLayout'un tüm genişliğini doldurduğundan , zaten mizanpajın yatay merkezinde bulunuyor . Bunu kullandığınızda android:layout_gravity, parçacığı bir bütün olarak belirtilen yerçekimine yerleştirir. Tüm pencere öğesi merkezini yerleştirmek yerine, gerçekten yapmaya çalıştığınız şey, içeriğin gerçekleştirilebileceği android:gravity="center_horizontal"ve android:layout_gravityöznitelik kaldırılabileceği merkeze yerleştirmektir .


3
Doğru anlarsam "android: layout_width =" fill_parent "öğesini" wrap_content "olarak değiştirebilir ve ardından android: layout_gravity =" center_horizontal "kullanabilir. Haklı mıyım?
Paul Brewczynski

1
@bluesm Hayır, iç LinearLayout bir View ile dolu olmayan alana sahip olmasına izin vermez (boş bir LinearLayout durumu dikkate alınmaz). Böylece android:layout_widthaynı değere sahip olacaktır (düzenden sonra). TextView genişliği iç LinearLayout ait olan eşit olduğu TextView'un etkili bir şekilde yer alır android:layout_gravitydeğerlerini left, rightve centeraynı zamanda.
Dan S

1
Onun ImageViewiçin layout_gravityve TextViewonun gravityiçin sadece işe yarayan şeydir . Android harika! Geliştirmenin imkansız olduğu tüm güzel SO gönderileri sayesinde.
Atul

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

Eğer ayarlarsanız <TextView>içinde merkezde <Linearlayout>daha sonra ilk koymak android:layout_width="fill_parent"zorunlu
diğer herhangi yerçekimi kullanmanın hiçbir ihtiyacı

    <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

Kullanım android:gravity="center"içinde TextViewyerine layout_gravity.


Kısa ve kesin cevap. Teşekkür ederim
nurnachman

4

Sadece şunu kullanın: android: layout_centerHorizontal = "true"

Tüm metin görünümünü merkeze koyacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.