如何在TextView中将文本水平和垂直居中?


2023

如何水平和垂直居中文本的TextView,所以,它正好出现在中间TextViewAndroid


7
将layout_width和layout_height都设置为fill_parent,然后将引力设置为居中。那会成功的
阿米拉(Amila)2015年

2
现在已不推荐使用fill_parent,因此请在layout_width和layout_height中使用MATCH_PARENT并将TextView的重力设置为居中。
比拉勒·艾哈迈德

Answers:


3084

我假设您正在使用XML布局。

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

您也可以使用重力center_verticalcenter_horizontal根据需要使用重力。

就像@stealthcopter在Java中评论的那样: .setGravity(Gravity.CENTER);


58
当与RelativeLayout一起使用时,该方法的布局的高度和宽度设置为wrap_content,此方法不起作用
Rob,

96
@Rob,如果宽度和高度为wrap_content,那么从技术上讲,文本已居中。
JoJo

3
如果我想使TextView相对于另一个视图对齐,但其文本居中对齐?

9
这对我不起作用(android:gravity="center")。它仍然显示在屏幕的最左侧。:(
uSeRnAmEhAhAhAhAhAhA 2013年

30
不要与混淆android:layout_gravity="center",后者还有其他作用。
鲁迪·克肖

444
android:gravity="center" 

这将解决问题


32
文本视图必须是match_parent或fill_parent才能起作用。如果其包含内容,则它将不会居中。
Kalel Wade 2014年

7
@KalelWade:将文本放在具有wrap_content的textview中居中根本没有意义。也许您正在考虑将textview放在父视图的中心,在这种情况下,您可以将此行简单地放在父视图中。
Mooing Duck

@Mooing Duck因此不使用包装内容的原因-这没有道理。但是,当您应付,粘贴或匆匆忙忙时,您可能无法将两个和两个放在一起。这就是为什么我提到它。
卡雷尔·韦德

1
如果宽度和高度等于“ wrap_content”的TextView在宽度和高度为“ match_parent”的LinearLayout内,则需要设置Linear_layout的layout_gravity。
Faisal Naseer

1
@MooingDuck,当高度为“ wrap_content”且重力为“ center_vertical”时,它以居中位置绘制“设计(预览)”,但在设备中它位于顶部。因此,使高度为“ match_parent”,并将重力设置为“ center_vertical”或“ center”。
CoolMind

296

您还可以使用以下方法动态设置:

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

141
或者只是textview.setGravity(Gravity.CENTER);
Amplify91 2011年

判断选择哪种方式,以xml编写或以Java文件编写的判断标准是什么?
kenju 2015年

2
@Kenju,如果您希望它易于编辑并且在运行时该值不会更改:XML。如果必须实时更改值(例如,当用户按下按钮时更改对齐方式),则只能通过Java进行操作。
古斯塔沃·麦克尼尔

2
@GustavoMaciel因此,基本上是xml,除非需要动态修改它。。。现在我明白了。感谢您简单实用的回答!
kenju 2015年

114
android:layout_centerInParent="true"

与RelativeLayout结合使用时,该布局的高度和宽度均设置为wrap_content。


19
这使TextView居中,而不是其中的文本居中。
anthropomo

2
当中有自动换行功能时,此功能将无效TextView。文本将在内以全角和多行并以左对齐TextView。它将在显示屏上左对齐。您应该使用其他答案中指定的“重力”。
David Manpearl

82

您也可以使用以下组合:

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

有两种方法可以做到这一点。

XML代码中的第一个。您需要注意该Gravity属性。您还可以在“图形编辑器”中找到此属性;它可能比XML EDITOR容易。

<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,请确保也将TableRows的重力设置为居中。否则它将无法正常工作。至少在我将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 Gravity(居中水平和居中垂直):

android:layout_centerHorizontal="true"   

android:layout_centerVertical="true"

并动态使用:

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

代码语义是错误的。更换layout_centerhorizontallayout_centervertical通过layout_centerHorizontallayout_centerVertical(“H”和“V”为大写,否则它不会工作)。
yugidroid

2
layout_ *告诉View的父对象要放置的位置。如果不使用layout_ *,则会告诉View如何放置其组件
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_parentwrap_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或更高。



这将使文本真正位于TextView中。如果仅使用重力,则根据文本的内容会有一些尾随填充...。例如,如果您在中心有一个带有文本的小圆形徽章,则可以看到非常明显的区别。
tarrball

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

直到TextView的尺寸达到match_parent时,textAlignment =“ center”才能执行此操作
SAurabh

上面的示例中的@SAurabh正常工作。
Chathura Wijesinghe

它在没有重力的情况下可以正常工作吗?它不会“文本对齐”将其视图范围内的文本对齐,因此,在这种情况下,直到textView变为match_parent为止,如果其父级布局中没有重力或其自身中的
layout_gravity

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,则会发现两个重力属性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"
/>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.