TextViewでテキストを水平および垂直に中央揃えするにはどうすればよいですか?


2026

どのように私はで水平方向および垂直方向にテキストを中央んTextView、それは正確に中央に表示されますので、こと、TextViewAndroid


7
layout_widthとlayout_heightの両方をfill_parentに設定してから、重力を中央に設定します。これでうまくいきます
Amila

2
fill_parentは非推奨になりました。layout_widthとlayout_heightでMATCH_PARENTを使用し、TextViewの重力を中央に設定します。
Bilal Ahmad

回答:


3086

XMLレイアウトを使用していると思います。

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"
    android:text="@string/**yourtextstring**"
/>

また、重力を使用することができますcenter_verticalか、center_horizontalあなたの必要性に応じて。

そして@stealthcopterがJavaでコメントしたように: .setGravity(Gravity.CENTER);


58
これは、レイアウトの高さと幅がwrap_contentに設定されているRelativeLayoutで使用すると機能しません
Rob

96
@Rob、幅と高さがwrap_contentの場合、技術的にはテキストはすでに中央揃えになっています。
ジョジョ

3
TextViewを別のビューに対して相対的に配置したいが、テキスト自体が中央に配置されている場合はどうなりますか?

9
これは機能しません(android:gravity="center")。それでも画面の左端に表示されます。:(
uSeRnAmEhAhAhAhAhA 2013

30
と混同しないでくださいandroid:layout_gravity="center"
Rudi Kershaw 2014

445
android:gravity="center" 

これはトリックを行います


32
これが機能するには、textviewがmatch_parentまたはfill_parentである必要があります。コンテンツをラップすると、中央に配置されません。
Kalel Wade 2014

7
@KalelWade:wrap_contentを使用してテキストをテキストビューの中央に配置しても、まったく意味がありません。テキストビューを親ビューの中央に配置することを考えているかもしれません。その場合は、この行を親に単純に配置します。
Mooing Duck

@Mooing Duckしたがって、ラップコンテンツを使用しない理由-意味がありません。ただし、対処して貼り付けたり、急いでいる場合は、2つと2つを組み合わせることはできません。それが私がそれを述べた理由です。
Kalel Wade、2016

1
幅と高さが「wrap_content」に等しいTextViewが、幅と高さが「match_parent」のLinearLayout内にある場合は、Linear_layoutのlayout_gravityを設定する必要があります。
Faisal Naseer 2017

1
@MooingDuckは、高さが "wrap_content"で重力が "center_vertical"の場合、デザイン(プレビュー)では中央に描画されますが、デバイスでは上部に配置されます。したがって、高さを「match_parent」にして、重力を「center_vertical」または「center」に設定します。
CoolMind 2018

297

以下を使用して動的に設定することもできます。

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

141
または単にtextview.setGravity(Gravity.CENTER);
Amplify91 2011

どの方法を選択するか、xmlで書き込むか、Javaファイルで書き込むかを決定する判断基準は何ですか?
ケンジュ

2
@Kenjuを簡単に編集できるようにし、実行時に値が変更されないようにする場合:XML。値をリアルタイムで変更する必要がある場合(たとえば、ユーザーがボタンを押したときに配置を変更する場合)は、Javaを介してのみ行うことができます。
Gustavo Maciel

2
@GustavoMacielなので、動的に変更する必要がない限り、基本的にはxmlです。あなたのシンプルで便利な答えをありがとう!
kenju 2015年

115
android:layout_centerInParent="true"

これは、レイアウトの高さと幅がwrap_contentに設定されているRelativeLayoutで使用すると機能します。


19
これは、テキストではなく、TextViewを中央に配置します。
anthropomo

2
でワードラップがある場合、これは機能しませんTextView。テキストは全幅で複数行になり、内で左揃えになりTextViewます。ディスプレイでは左揃えで表示されます。他の回答で指定されている「重力」を使用する必要があります。
David Manpearl 2013

83

次の組み合わせも使用できます。

android:gravity="left|center"

次に、textviewの幅が "fill_parent"より大きい場合でも、テキストは左に揃えられます(重力が "center"のみに設定されている場合のように中央揃えされません)。


56

重力をかける:

TextView txtView = (TextView) findViewById(R.id.txtView);
txtView.setGravity(Gravity.CENTER_HORIZONTAL);

垂直の場合:

txtView.setGravity(Gravity.CENTER_VERTICAL);

XMLの場合:

<TextView      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"
    android:text="@string/Hello_World"        
/>

42

これを行うには2つの方法があります。

XMLコードの最初。Gravity属性に注意を払う必要があります。この属性はグラフィックエディタでも確認できます。XMLエディターよりも簡単かもしれません。

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal"
    android:text="Your Text"
/>

特定のシナリオでは、重力の値は次のようになります。

center_vertical|center_horizontal

グラフィカルエディターでは、すべての可能な値が見つかり、結果も表示されます。


41

TableLayoutを使用している場合は、TableRowの重力も中央に設定してください。そうしないと機能しません。TableRowの重力を中央に設定するまで、少なくとも私にはうまくいきませんでした。

たとえば、次のようになります。

<TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center">        
    <TextView android:text="@string/chf" android:id="@+id/tv_chf" android:layout_weight="2" android:layout_height="wrap_content" android:layout_width="fill_parent" android:gravity="center"></TextView>        
</TableRow>

面白い。それがLinearLayout(TableRowの親)にも有効かどうかを確認する必要があります。
マーティン

38

次のようにTextView重力(中央水平&中​​央垂直)を設定する必要があります。

android:layout_centerHorizontal="true"   

そして

android:layout_centerVertical="true"

そして動的に使用する:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

コードのセマンティクスが間違っています。交換layout_centerhorizontallayout_centerverticalによってlayout_centerHorizontal、およびlayout_centerVertical(「H」および「V」大文字に、それ以外の場合は作業を習慣)。
yugidroid

2
layout_ *は、ビューの親に配置する場所を伝えます。layout_ *がない場合、ビューにそのコンポーネントの配置方法を指示します
Dandre Allison

34

私の考えでは、

android:gravity="center"

よりも良い、

android:layout_centerInParent="true"

これは

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

少なくともテキストのフォーマット用。


30

線形レイアウトの場合:XMLでは次のようなものを使用します

<TextView  
    android:id="@+id/textView1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal"
    android:text="Your Text goes here"
/>

実行時にこれを行うには、アクティビティで次のようなものを使用します

TextView textView1 =(TextView)findViewById(R.id.texView1);
textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

相対レイアウトの場合:XMLでは次のようなものを使用します

<TextView  
    android:id="@+id/textView1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true"
    android:text="Your Text goes here"
/>

実行時にこれを行うには、アクティビティで次のようなものを使用します

TextView textView1 =(TextView)findViewById(R.id.texView1);
RelativeLayout.LayoutParams layoutParams = RelativeLayout.LayoutParams)textView1.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
textView1.setLayoutParams(layoutParams);

24

XMLファイルで使用します。

レイアウトファイル

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:text="@string/stringtext"/>

または:

これをJavaクラス内で使用します

TextView textView =(TextView)findViewById(R.id.texviewid);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

21

これを相対的なレイアウトに使用する

android:layout_centerInParent="true"

その他のレイアウトの場合

android:gravity="center" 

18

場合はTextView's、高さと幅がありwrap content、その後内のテキストTextViewは常に中央に配置します。しかし、あればTextView's幅がありmatch_parent、高さがあるmatch_parentか、wrap_contentあなたは以下のコードを記述する必要があり、その後:

以下のためのRelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" 
        android:text="Hello World" />

</RelativeLayout>

以下のためのLinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Hello World" />

</LinearLayout>

17

TextViewで重力を使用すると機能しますが、APIレベル17で実装された別の方法があります-

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

違いはわかりませんが、うまくいきます。ただし、APIレベル17以上のみ。


差がここで説明されていますstackoverflow.com/questions/16196444/...
jasdefer

これにより、テキストがTextViewの中央に配置されます。重力のみを使用する場合、テキストが何であるかに応じて、末尾に少しパディングがあります...たとえば、中央にテキストが表示された小さな丸いバッジがある場合、非常に明らかな違いを確認できます。
ターボール

14

ではRelativeLayout、それでうまくいきます。

そしてButton、あなたが追加できる他の何か。

以下は私にとってうまくいきます。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ff314859"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">
    <TextView 
        android:id="@+id/txt_logo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="your text here"
        android:textSize="30dp"
        android:gravity="center"/>

        ...other button or anything else...

</RelativeLayout>

11

最も簡単な方法(意外にもコメントでのみ言及されているため、回答として投稿しているのはなぜですか)は次のとおりです。

textview.setGravity(Gravity.CENTER)


10

TableLayoutのTableRowの中央にテキストを配置しようとしている場合は、次のようにしてこれを実現しました。

<TableRow android:id="@+id/rowName"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:padding="5dip" >
    <TextView android:id="@+id/lblSomeLabel"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center"
              android:layout_width="0dp"
              android:layout_weight="100"
              android:text="Your Text Here" />
</TableRow>

10

使用する android:textAlignment="center"

       <TextView
        android:text="HOW WAS\nYOUR\nDAY?"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:id="@+id/textView5"
         />

textAlignment = "center"は、TextViewの寸法がmatch_parentに
一致

上記の@SAurabhは問題なく動作しています。
Chathura Wijesinghe

それはそれ自体で親に重力またはレイアウト重力なしで働いていますか?テキストの配置はビューの境界内でテキストを配置しません。そのため、textViewがmatch_parentを取得するまでは、親のレイアウトまたはlayout_gravity自体に重力がないと、このようには見えません
SAurabh

9

これが私がアプリで使用した私の答えです。画面中央にテキストを表示します。

<TextView
    android:id="@+id/txtSubject"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/subject"
    android:layout_margin="10dp"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge" />

9

相対レイアウトを使用している場合:

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_centerInParent="true"/>

LinearLayoutを使用している場合

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_gravity="center"/>

8

上記の多くの回答が示唆するように、うまく機能します。

android:gravity="center"

垂直方向に中央揃えにしたい場合:

android:gravity="center_vertical"

または単に水平に:

android:gravity="center_horizontal"


7

このようにしてテキストを中央揃えにすることができます

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

7

TextViewの高さと幅は折り返しコンテンツであり、textview内のテキストは常に中央に配置され、次を使用して親レイアウトの中央に配置されます。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Hello.."/>
</RelativeLayout>

LinearLayoutの場合もコードは同じです。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello.."/>
</LinearLayout>

そして文法的に親はRelativeLayout Javaコードですこれは実行時にこれをあなたの活動でこのようなものを使用します

TextView textView1 =(TextView)findViewById(R.id.texView1);
RelativeLayout.LayoutParams layoutParams = RelativeLayout.LayoutParams)textView1.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
textView1.setLayoutParams(layoutParams);

6

私たちはこれらの複数の方法でこれを達成できます:-

XMLメソッド01

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:gravity="center_vertical|center_horizontal"
    android:text="@strings/text"
/>

XMLメソッド02

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@strings/text"
/>

XMLメソッド03

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:gravity="center"
    android:text="@strings/text"
/>

XMLメソッド04

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:layout_centerInParent="true"
    android:text="@strings/text"
/>

Javaメソッド01

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Javaメソッド02

textview.setGravity(Gravity.CENTER);

Javaメソッド03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

6

TextView重力は、親レイアウトに従って機能します。

LinearLayout

LinearLayoutを使用すると、2つの重力属性android:gravityとandroid:layout_gravityが見つかります

android:gravity:TextViewの内部テキストのレイアウト部分を表し、android:layout_gravity:親ビューのTextView位置を表します。

ここに画像の説明を入力してください

テキストを水平方向および垂直方向の中央に設定する場合は、以下のコードを使用してください

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:background="@android:color/background_light"
    android:layout_height="300dp">

    <TextView
        android:layout_width="match_parent"
        android:text="Hello World!"
        android:gravity="center_horizontal"
        android:layout_gravity="center_vertical"
        android:layout_height="wrap_content"
    />
</LinearLayout>

RelativeLayout

RelativeLayoutを使用すると、TextViewの以下のプロパティを使用できます

android:gravity = "center":TextViewのテキストセンター。

android:gravity = "center_horizo​​ntal"内部テキストを水平方向に中央揃えにする場合。

android:gravity = "center_vertical"垂直方向に中央揃えにする場合は、内部テキスト。

android:layout_centerInParent = "true"の場合、TextViewを親ビューの中央に配置します。android:layout_centerHorizo​​ntal = "true":TextViewを親ビューの水平方向の中央に配置する場合。android:layout_centerVertical = "true"の場合、TextViewを親ビューの垂直方向の中央に配置します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:background="@android:color/background_light"
    android:layout_height="300dp">

    <TextView
        android:layout_width="match_parent"
        android:text="Hello World!"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
    />
</RelativeLayout>

ところで、以前のリビジョンにロールバックした理由はありますか?元に戻したリビジョンは、エディターが言及したように、テキストエディターのエンコードに役立つようにするための良い習慣です。
Edric

5

この方法を試してください、それは動作します

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_horizontal|center_vertical">

                    <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAlignment="center"
                    />

            </LinearLayout>

5

実際、fontPaddingを除外することで、より良い結果が得られます。

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.