Android-LinearLayoutでTextViewを水平方向に中央揃え


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 = "center"を試してください
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_horizo​​ntal "を使用できます。正しいですか?
Paul Brewczynski

1
@bluesmいいえ、内部のLinearLayoutでは、ビューで埋められていないスペースを使用できません(LinearLayoutが空の場合を考慮していません)。したがって、the android:layout_widthは同じ値になります(レイアウト後)。TextViewの幅は、内側のLinearLayoutのと等しいのでのTextViewを効果的に有しているandroid:layout_gravityの値leftright、とcenterで同じ時間。
Dan S

1
ImageViewそのlayout_gravityとのためにTextViewそのgravity何であるだけで動作します。Androidは素晴らしいです!開発がまったく不可能だった美しいSOの投稿に感謝します。
Atul、2016

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>


4

ちょうど使用:android:layout_centerHorizo​​ntal = "true"

テキストビュー全体を中央に配置します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.