Android - Центр перегляду 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 правильний, але текст вирівняний зліва. Перегляд тексту займає всю ширину батьківського перегляду, а перегляд тексту встановлюється по центру. Не впевнений, у чому проблема ...


2
спробуйте android: gravity = "центр" для вашого перегляду тексту
user370305

Відповіді:


227

Що відбувається, так як TextView заповнює всю ширину внутрішнього LinearLayout, він вже знаходиться в горизонтальному центрі макета . Коли ви користуєтесь android:layout_gravityцим, віджет розміщується в цілому за вказаною гравітацією. Замість того, щоб розміщувати весь центр віджетів, те, що ви насправді намагаєтеся зробити, - розмістити вміст у центрі, який можна виконати, android:gravity="center_horizontal"а android:layout_gravityатрибут можна видалити.


3
Якщо я правильно розумію , що він може змінити "андроїд: layout_width =" fill_parent »до" wrap_content " , а потім використовувати Android: layout_gravity =" center_horizontal "я прав.?
Пол Brewczynski

1
@bluesm Ні, внутрішній LinearLayout не дозволяє собі мати простір, не заповнений представленням (не враховуючи випадок порожнього LinearLayout). Таким чином, android:layout_widthзаповіт матиме однакове значення (після компонування). Так як ширина TextView дорівнює з внутрішньої LinearLayout TextView ефективно має android:layout_gravityзначення left, rightі centerв той же самий час.
Dan S

1
Для ImageViewйого layout_gravityі для TextViewйого gravityє те, що тільки працює. Android - це чудово! Дякую всім прекрасним публікаціям SO, без яких розвиток було просто неможливим.
Атул

1
не забувайте про android:layout_width="match_parent"
Чолецький

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>


4

Просто використовуйте: android: layout_centerHorizontal = "true"

Це поставить увесь перегляд тексту в центр

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.