118

I have the following basic layout

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

It seems like the xml is correct but the text is aligned to the left. The textview takes up the entire width of the parent and the textview is set to be centered. Not sure what the problem is...

Krushna Chulet
  • 1,625
  • 1
  • 10
  • 9
Jake Wilson
  • 88,616
  • 93
  • 252
  • 370

5 Answers5

237

What's happening is that since the the TextView is filling the whole width of the inner LinearLayout it is already in the horizontal center of the layout. When you use android:layout_gravity it places the widget, as a whole, in the gravity specified. Instead of placing the whole widget center what you're really trying to do is place the content in the center which can be accomplished with android:gravity="center_horizontal" and the android:layout_gravity attribute can be removed.

Joe
  • 80,724
  • 18
  • 127
  • 145
Dan S
  • 9,139
  • 3
  • 37
  • 48
  • 3
    If I understand correctly he could change "android:layout_width="fill_parent" to "wrap_content" and then use android:layout_gravity="center_horizontal". Am I right ? – Paweł Brewczynski Dec 04 '13 at 20:59
  • 1
    @bluesm No, the inner LinearLayout doesn't allow itself to have space that is not filled with a View (not considering the case of an empty LinearLayout). Thus the the `android:layout_width` will have the same value (after layout). Since the width of the TextView is equal to the with of the inner LinearLayout the TextView effectively has the `android:layout_gravity` values of `left`, `right`, and `center` at the same time. – Dan S Dec 04 '13 at 22:20
  • 1
    For `ImageView` its `layout_gravity`and for `TextView` its `gravity` is what **only** works. Android is great ! Thanks to all beautiful SO posts without which development was just impossible. – Atul Aug 06 '16 at 12:36
  • 2
    don't forget about `android:layout_width="match_parent"` – Choletski Nov 03 '16 at 15:03
26

If you set <TextView> in center in <Linearlayout> then first put android:layout_width="fill_parent" compulsory
No need of using any other gravity

    <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>
Prasad Jadhav
  • 5,090
  • 16
  • 62
  • 80
patel135
  • 927
  • 13
  • 19
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>

JoeLallouz
  • 1,338
  • 1
  • 10
  • 14
17

Use android:gravity="center" in TextView instead of layout_gravity.

Ragunath Jawahar
  • 19,513
  • 22
  • 110
  • 155
Blackbelt
  • 156,034
  • 29
  • 297
  • 305
3

Just use: android:layout_centerHorizontal="true"

It will put the whole textview in the center