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

How do I center text horizontally and vertically in a TextView?

提问人:Pablo Fernandez 提问时间:1/11/2009 最后编辑:Alexander AbakumovPablo Fernandez 更新时间:9/4/2023 访问量:1513248

问:

如何使文本在 中水平和垂直居中,使其恰好出现在 in 的中间?TextViewTextViewAndroid

安卓 文本视图

评论

15赞 DbxD 6/25/2015
将 layout_width 和 layout_height 都设置为 fill_parent,然后将重力设置为中心。这样就可以了
5赞 Bilal Ahmad 6/30/2018
fill_parent 现已弃用,因此请在 layout_width 中使用 MATCH_PARENT,并layout_height并将 TextView 的重力设置为居中。

答:

3419赞 Bill 1/11/2009 #1

我假设您使用的是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);

对于 Kotlin 用户,.gravity = Gravity.CENTER

评论

66赞 Rob 8/18/2011
当与 RelativeLayout 一起使用时,这不起作用,其中布局的高度和宽度设置为 wrap_content
110赞 JoJo 11/17/2011
@Rob,如果宽度和高度wrap_content,那么从技术上讲,文本已经居中。
4赞 3/11/2012
如果我想将 TextView 相对于另一个视图对齐,但它本身是以文本为中心的?
10赞 uSeRnAmEhAhAhAhAhA 9/20/2013
这对我不起作用()。它仍然显示在屏幕的最左侧。:(android:gravity="center"
42赞 Rudi Kershaw 12/22/2014
不要与 混淆,后者会做其他事情。android:layout_gravity="center"
314赞 zeevb 11/21/2009 #2

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

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

评论

145赞 Amplify91 4/8/2011
或者只是textview.setGravity(Gravity.CENTER);
1赞 kenju 8/20/2015
判断决定选择哪种方式,用xml写还是用Java文件写的标准是什么?
3赞 Gustavo Maciel 11/6/2015
@Kenju是否希望它易于编辑,并且值在运行时不会更改:XML。如果必须更改值 realtime(例如,在用户按下按钮时更改对齐方式),则只能通过 Java 执行此操作。
3赞 kenju 11/6/2015
@GustavoMaciel,基本上是xml,除非它需要动态修改......现在我明白了。感谢您简单而有用的回答!
488赞 Jean 2/9/2010 #3
android:gravity="center" 

这将解决问题

评论

37赞 Kalel Wade 8/18/2014
文本视图必须match_parent或fill_parent才能正常工作。如果它的包装内容,那么它不会居中。
9赞 Mooing Duck 2/27/2016
@KalelWade:在文本视图中居中文本wrap_content根本没有意义。也许您正在考虑将文本视图置于父视图的中心,在这种情况下,您可以简单地将此行放在父视图中。
1赞 Kalel Wade 2/27/2016
@Mooing鸭子 因此,不使用包装内容的原因 - 这没有意义。但是,当你要么在应对和粘贴,要么只是匆匆忙忙时,你可能不会把两个和两个放在一起。这就是我提到它的原因。
3赞 Faisal Naseer 2/2/2017
如果宽度和高度等于“wrap_content”的 TextView 位于宽度和高度为“match_parent”的 LinearLayout 中,则需要设置 Linear_layout 的layout_gravity。
2赞 CoolMind 2/28/2018
@MooingDuck,当高度为“wrap_content”且重力为“center_vertical”时,它会在设计(预览)中居中绘制,但在设备中,它位于顶部。因此,将高度设置为“match_parent”,并将重力设置为“center_vertical”或“中心”。
41赞 Maverick1st 5/13/2011 #4

如果您使用的是 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>

评论

0赞 Martin 8/12/2014
有趣。必须检查这是否对 LinearLayout(TableRow 父级)有效。
126赞 itherese 11/11/2011 #5
android:layout_centerInParent="true"

这与 RelativeLayout 一起使用时有效,其中布局的高度和宽度设置为 wrap_content。

评论

22赞 anthropomo 1/12/2013
这将使 TextView 居中,而不是其中的文本。
3赞 David Manpearl 4/13/2013
当 中存在自动换行时,这不起作用。文本将是全角和多行的,并且在 中左对齐。它将在显示屏上显示为左对齐。您应该使用其他答案中指定的“重力”。TextViewTextView
39赞 NagarjunaReddy 5/15/2012 #6

您需要像这样设置 TextView Gravity (Center Horizontal & Center Vertical):

android:layout_centerHorizontal="true"   

android:layout_centerVertical="true"

并动态使用:

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

评论

0赞 yugidroid 8/1/2012
代码语义是错误的。将 和 替换为 and(“H”和“V”为大写,否则将不起作用)。layout_centerhorizontallayout_centerverticallayout_centerHorizontallayout_centerVertical
2赞 Dandre Allison 10/8/2012
layout_* 告诉视图的父级它想要的位置。不带layout_* 告诉视图如何放置其组件
10赞 dyslexicanaboko 7/15/2012 #7

如果您尝试在 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>
34赞 epicness42 7/16/2012 #8

在我看来,

android:gravity="center"

比,

android:layout_centerInParent="true"

哪个比,

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

至少对于格式化文本。

14赞 Yuda Prawira 11/21/2012 #9

在,它会很好。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>
89赞 Szorstki 1/2/2013 #10

您还可以使用以下组合:

android:gravity="left|center"

然后,如果文本视图宽度大于“fill_parent”,则文本仍将向左对齐(不像重力仅设置为“center”那样居中)。

11赞 note-knotz 4/2/2013 #11

您只需将 textview 设置为 .gravityCENTER

7赞 Mansoor Ahmad Samar 5/7/2013 #12

简单地说,在 XML 文件中,将 textview 重力设置为居中:

<TextView
    android:gravity="center" />
59赞 Gaganpreet Singh 5/30/2013 #13

施加重力:

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"        
/>
9赞 Md. Naushad Alam 6/3/2013 #14

这是我在应用程序中使用的答案。它在屏幕中央显示文本。

<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" />
8赞 rgamber 7/5/2013 #15

正如上面的许多答案所暗示的那样,工作正常。

android:gravity="center"

如果只想垂直居中:

android:gravity="center_vertical"

或者只是水平:

android:gravity="center_horizontal"
17赞 0xC0DED00D 8/25/2013 #16

虽然对 TextView 使用重力工作,但在 API 级别 17 中实现了一种替代方法 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

不知道区别,但它也有效。但是,仅适用于 API 级别 17 或更高版本。

评论

0赞 jasdefer 7/10/2015
区别描述如下:stackoverflow.com/questions/16196444/...
0赞 tarrball 12/27/2019
这将使文本真正在 TextView 中居中。如果你只使用重力,根据文本的内容,会有一些尾随填充。例如,如果你有一个中间有文字的小圆圈徽章,你可以看到一个非常明显的差异。
25赞 venu 10/5/2013 #17

在 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);
22赞 user1087919 10/11/2013 #18

将其用于相对布局

android:layout_centerInParent="true"

和其他布局

android:gravity="center" 
2赞 Amey Haldankar 2/19/2014 #19
<TextView
android:id="+@id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
/>
2赞 Ruben JG 3/13/2014 #20

你试过这种方式吗?

<TextView
android:id="+@id/txtVw"
android:gravity="center"
/>
45赞 Cristiano Guerra 10/17/2014 #21

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

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

<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

在图形编辑器中,您将找到所有可能的值,甚至查看它们的结果。

33赞 Karthikeyan 1/3/2015 #22

对于线性布局: 在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);
10赞 Niranjan 11/15/2015 #23

如果您使用的是相对布局:

  <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"/>
11赞 JKennedy 12/15/2015 #24

最简单的方法(令人惊讶的是,这只在评论中提到,因此我发布作为答案的原因)是:

textview.setGravity(Gravity.CENTER)
20赞 Avijit Karmakar 12/17/2015 #25

如果高度和宽度是,则 中的文本始终居中。但是,如果宽度是,高度是或,那么你必须编写以下代码:TextView'swrap contentTextViewTextView'smatch_parentmatch_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>
9赞 Attif 3/7/2016 #26

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);
7赞 Anil 5/20/2016 #27

android:gravity="center_horizontal"用于将文本水平居中对齐。 用于垂直对齐文本居中。 用于对齐文本 垂直和水平居中。android:gravity="center_vertical"android:gravity="center"

<TextView
        android:layout_width="match_parent"
        android:gravity="center_horizontal|center_vertical"
        android:layout_height="match_parent" />
10赞 Cunity 6/18/2016 #28

试试这种方式,它会起作用的

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center">
  
        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="center"/>

</LinearLayout>
0赞 Thamays 7/20/2016 #29
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="25dp"
        android:textStyle="bold"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="Tours"
        android:id="@+id/textView" />
0赞 user3105222 8/18/2016 #30

对于那些想知道如何在其 TextView 元素中垂直居中,同时将其保持在左侧(水平)的人:

android:gravity="center"
android:textAlignment="viewStart"
3赞 Himmat Gill 8/18/2016 #31

将布局文件中的 gravity 属性设置为android:gravity="center"

5赞 Muklas 9/5/2016 #32

center text

<LinearLayout
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_height="wrap_content">
    <TextView
            android:id="@+id/failresults"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="3dp"
            android:gravity="center_vertical|center_horizontal"
            android:text=""
            android:textSize="12sp" />
</LinearLayout>

如果 LinnearLayout 中有 TextView,则需要将它们都设置为重心

0赞 Heena Arora 10/6/2016 #33
There are 2 ways to do this :

1. From Xml
     use :  
        <TextView
         .........
        android:gravity="center"/>

2. From Java class
    use : 

     [textview].setGravity(Gravity.CENTER);
2赞 koteswara D K 12/7/2016 #34

在XML中使用以下代码,它对我有用,您可以更改它位于中心的方向

<LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:background="@color/colorPrimaryDark"
        android:gravity="center"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/id_text"
            android:layout_width="wrap_content"
            android:textSize="18sp"
            android:textColor="@android:color/white"
            android:textStyle="normal"
            android:layout_height="wrap_content"
            android:text="centre me"/>
    </LinearLayout>
4赞 Mansuu.... 1/23/2017 #35

我不认为,你真的需要这样做,只需像这样在布局文件中定义你的TextView

<RelativeLayout
    android:layout_width="width"
    android:layout_height="height">
    <TextView
        android:id="@+id/yourid"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Your text" />
</RelativeLayout>
1赞 Varun Jain 3/5/2017 #36

如果您正在使用 ,请尝试在标记中使用此属性:RelativeLayoutTextView

android:layout_centerInParent= true

评论

0赞 Mason 4/20/2017
“true”应该用引号括起来
2赞 Praveen Gaur 3/22/2017 #37

用于解决您的问题。android:gravity="center"

7赞 Kamlakar Kate 6/30/2017 #38

你可以这样做,使文本居中

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />
1赞 Bapusaheb Shinde 9/20/2017 #39

试试这个:

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"
/>
11赞 Alpesh Sorathiya 9/20/2017 #40

TextView 重力按照父布局工作。

线性布局

如果你使用 LinearLayout,那么你会发现两个重力属性 Android:Gravity & Android:layout_gravity

android:gravity :表示 TextView 内部文本的布局药水,而 android:layout_gravity :表示父视图中的 TextView 位置。

enter image description here

如果你想将文本水平和垂直居中设置,请使用下面的代码

<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,您可以在 TextView 中使用以下属性

android:gravity=“center” 表示 TextView 中的文本中心。

android:gravity=“center_horizontal” 内部文本(如果要水平居中)。

android:gravity=“center_vertical” 内部文本(如果要垂直居中)。

android:layout_centerInParent=“true”,如果您希望 TextView 位于父视图的中心位置。 android:layout_centerHorizontal=“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>

评论

0赞 Edric 3/27/2019
顺便说一句,您有什么原因回滚到以前的修订版吗?您还原的修订版是一个很好的做法,因此正如编辑器所提到的,可以帮助文本编辑器进行编码。
0赞 Chaki_Black 2/5/2022
谢谢你和android:gravity="center_horizontal"android:layout_gravity="center_vertical"
0赞 Sarvesh Thiruppathi 11/13/2017 #41

您可以使用 android:gravity=“center” 将文本视图居中

代码如下

    <TextView
     android:text="@string/yourText"
     android layout_height="wrap_content"
     android layout_height="wrap_content"
     android:gravity="center" />
0赞 Alejandro Bertinelli 11/28/2017 #42

如果该 TextView 的 height / width 属性未设置为 ,则使用 .但有些人抱怨使用它不起作用。那是因为它们的布局没有相同的重力。您可以设置wrap_contentandroid:gravity="center"

android:layout_gravity="center" 在 TEXTVIEW 中(这仅适用于 TextView)

android:gravity="center" 在父布局中(这将应用于其中的所有视图)

1赞 Sachin Rajput 12/4/2017 #43

我添加了 xml 片段,使文本视图中心在线性和相对布局中都对齐。

线性布局

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text In Center"
android:layout_gravity="center"
android:gravity="center"/>

在相对布局中

<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Text In Center"
android:layout_centerInParent= true/>
0赞 itzhar 12/15/2017 #44

在 ConstraintLayout 中,对于任何视图:

(使用约束布局时,将高度和宽度设置为 0,并让约束管理视图边界。

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
0赞 Fenil Patel 12/18/2017 #45

如何使视图或其内容居中,例如 TextView 或 Button 水平和垂直?layout_gravity可用于定位 视图位于其父项的中心。虽然重力属性用于 将视图的内容(例如“文本”)放置在视图的中心。

( 1 ) 水平居中 TextView

enter image description here

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
       android:orientation="vertical"
       android:layout_margin="10dp"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:layout_gravity="center"
        android:background="#333"
        android:textColor="#fff"
        />

</LinearLayout>

( 2 ) 垂直居中 TextView

android:layout_gravity=“center_vertical”剂量不起作用!!

要使 TextView 垂直居中,您需要制作一个技巧。将 TextView 放在 RelativeLayout 中,然后设置 TextView 属性 android:layout_centerInParent=“true”enter image description here

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
       android:orientation="vertical"
       android:layout_margin="10dp"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:layout_centerInParent="true"
        android:layout_gravity="center_vertical"
        android:gravity="center"
        android:background="#333"
        android:textColor="#fff"
        />

</RelativeLayout>

( 3 ) 文本水平居中

android:重力=“center_horizontal”

enter image description here

( 4 ) 水平和垂直居中文本

android:gravity=“center” 这将使文本水平居中,并且 垂直

enter image description here

<TextView
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    android:text="Hello World!"
    android:gravity="center"
    android:background="#333"
    android:textColor="#fff"
    />
1赞 user8716106 2/5/2018 #46

假设屏幕中的全文视图

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

假设相对布局中的 Textview(not full)

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

假设 Textview(not full) in Linear_layout

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:layout_gravity="centre"
    />
8赞 ArghadipDasCEO 2/11/2018 #47

我们可以通过以下多种方式实现这一目标:-

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);
1赞 hyperCoder 3/4/2018 #48

通过。文件重力可以设置为居中,如下所示xml

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

通过java,以下是解决特定问题的方法

textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
0赞 Aravinth Velusamy 3/20/2018 #49

使用 TextView 中的 Gravity 属性使文本垂直和水平居中。

android:gravity="center"
2赞 user9680608 4/22/2018 #50
<TextView  
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center"
android:text="In the center"/>

上面是使用 .xml 文件设置它。

但我更喜欢 java 版本,因为如有必要,您也可以在运行状态下在代码中禁用它。以下是 java 代码。

textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
0赞 TejpalBh 5/8/2018 #51

使用 android:gravity=“center” 作为父级

<LinearLayout
    android:layout_width="200dp"
    android:layout_height="200dp"

    android:gravity="center"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Hello world"
        />
</LinearLayout>
0赞 Jatin Mandanka 5/25/2018 #52

这是解决方案。

<TextView  
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:gravity="center"
       android:text="**Your String Value**" />
1赞 OkDroid 6/13/2018 #53

您可以将重力设置为垂直居中,将文本对齐设置为居中。

<TextView
     android:text="@string/yourText"
     android layout_height="wrap_content"
     android layout_height="wrap_content"
     android:gravity="center_vertical"
     android:textAlignment="center" />
0赞 hash 11/5/2018 #54

您可以为此进行更改。android:gravity

android:gravity="center"

如果要水平或垂直居中

android:gravity="center_horizontal"

android:gravity="center_vertical"

0赞 Joshua Best 12/15/2018 #55

您可以在 java 中以编程方式执行此操作:textview.setGravity(Gravity.CENTER);

1赞 Sarvesh Thiruppathi 12/29/2018 #56
android:gravity="center" 

xml 中的这一行将帮助您将 .TextView

1赞 mohamad sheikhi 2/7/2019 #57

您必须像这样设置重力:

(textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
1赞 mohamad sheikhi 2/16/2019 #58

试试这个:

<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" />
3赞 DEVSHK 3/25/2019 #59
 <android.support.constraint.ConstraintLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">


       <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="HELLO"
            android:textColor="@color/colorPrimaryDark"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>

 </android.support.constraint.ConstraintLayout>
1赞 Android Geek 3/26/2019 #60

试试这个:

如果使用 textview height and width match_parent则使用 LinearLayout 如果使用 textview 高度和宽度,则可以将重力文本设置为居中,将文本对齐设置为水平居中文本wrap_content然后在 LinearLayout 中添加重力中心属性。

XML 代码

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textAlignment="center"
    android:gravity="center"
    android:textColor="#000"
    android:textSize="30sp"
    android:text="Welcome to Android" />
    </LinearLayout>

Java 代码

你可以像这样编程:-

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

谢谢

3赞 Rishabh Saxena 4/1/2019 #61

如果要使文本视图的宽度和高度换行内容,则必须根据父支持的属性通过布局重力来管理其位置。否则你可以做。

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"/> 
0赞 Josss 4/27/2019 #62

应match_parent Textview 宽度和高度,并在 textview 属性中添加 android:gravity=“center”。

0赞 Rohit Patil 5/11/2019 #63

如果 XML 文件中只有一个 TextView,则可以将父视图重力设置为中心。 这将使你的子元素位于屏幕的中央,然后你可以使你的子视图作为高度和宽度的换行。

12赞 Chathura Wijesinghe 6/5/2019 #64

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

评论

0赞 SAurabh 6/18/2019
textAlignment=“center” 在 TextView 具有要match_parent的维度之前不会完成这项工作
0赞 Chathura Wijesinghe 6/19/2019
上面@SAurabh示例可以正常工作,没有任何问题。
0赞 SAurabh 9/20/2019
它是否在没有重力的情况下工作,或者本身没有布局重力?它不会 文本对齐会将文本在其视图范围内对齐,因此在 textView 采取match_parent在这种情况下,如果没有父布局中的重力或本身layout_gravity,它看起来就不会像这样
9赞 Seanghay 2/13/2020 #65

实际上,我们可以通过排除 fontPadding 来做得更好。

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

评论

0赞 CoolMind 10/26/2023
是的,删除文本周围的小填充。android:includeFontPadding="false"
3赞 Jamil Hasnine Tamim 8/17/2020 #66

对于 kotlin

如果要将代码居中:TextView

textView.gravity = Gravity.CENTER

如果要居中:horizontally

textView.gravity = Gravity.CENTER_HORIZONTAL

或者,居中:vertically

textView.gravity = Gravity.CENTER_VERTICAL
1赞 Sting 8/27/2020 #67

迟来的 GUI 荣誉奖

我想为这个已经很棒的线程增加一些价值。最后,在 11 年后,我们现在有办法从工具箱中拖放 TextView,并通过 GUI 属性框选择重力。而且,值得庆幸的是,GUI 将属性简洁地组合为“center_vertical|center_horizontal”。

enter image description here

    <TextView
    android:text="This is my sample text."
    android:layout_width="match_parent"
    android:layout_height="35.7dp"
    android:id="@+id/textView2"
    android:layout_marginBottom="24.7dp"
    android:typeface="sans"
    android:textSize="20"
    android:gravity="center_vertical|center_horizontal" />
2赞 Leslin Antony 10/9/2021 #68
android:textAlignment="center"

这将解决问题

评论

1赞 nima 10/9/2021
虽然此代码可以回答问题,但提供有关它如何和/或为什么解决问题的其他上下文将提高答案的长期价值。您可以在帮助中心找到有关如何写出好答案的更多信息:stackoverflow.com/help/how-to-answer 。祝你好运 🙂
1赞 Raushan Kumar 11/7/2021 #69

重新排列布局、图像或文本视图的位置属于对齐主题。因此,如果你想将你的图像 src 垂直放在中间,你应该使用下面写的代码

android:layout_centerVertical="true"

和 center 水平

android:layout_centerHorizontal="true"

否则,我认为我们还可以使用重力将每个元素放在父布局的中间,例如android:gravity="center"

3赞 Haechan 2/3/2022 #70

对于文本的布局,最好使用

android:textAlignment=“center”

对于对象等的其他布局,最好使用

android:重力=“center”

2赞 Ashish Kumar 5/6/2022 #71

要在中心显示文本,例如:

------------------>text<-------------------

使用以下样式:

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

android:gravity="center" 
4赞 TARUN SAINI 9/9/2022 #72

只需将其添加到您的 XML 中即可。

android:gravity="center" 
0赞 Hamid Raza Goraya 12/2/2022 #73

字体填充也会影响文本的位置,您可以通过添加 includefontpadding=false 来删除它

<TextView
    android:includeFontPadding="false"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" />
2赞 Sep 6/18/2023 #74

如其他答案中所述,您可以使用以下命令在 XML 中设置重力:

android:gravity="center"

在 Java 代码中:

textview.setGravity(Gravity.CENTER)

在 Kotlin 代码中:

textview.gravity = Gravity.CENTER

但是,如果您在 Kotlin Compose 中执行此操作,则可以使用以下命令将重力居中:

textAlign = TextAlign.Center
0赞 Bruce 9/4/2023 #75

只是把它留在这里,以防万一它为我节省了我花了 2 个小时才找到:

如果文本在给定维度中太大,则不会尝试将其在该维度中居中。这是有道理的,但默认情况下具有“字体填充”。因此,可以设置文本大小,使高度看起来可以舒适地放入文本视图中,但实际上它“太大”,因为它会侵占字体填充。在这种情况下,文本不会垂直居中,请求将被忽略。解决方案很简单 - 只需删除这个烦人的字体填充:TextView

android:includeFontPadding="false"

然后它按预期垂直居中。