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

pup*_*eno 1932 android textview

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

小智 2960

我假设你正在使用XML布局.

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"
    android:text="@string/**yourtextstring**"
/>
Run Code Online (Sandbox Code Playgroud)

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

并且正如@stealthcopter在java中评论过: .setGravity(Gravity.CENTER);

  • @Rob,如果宽度和高度是wrap_content,那么从技术上讲,文本已经居中. (93认同)
  • 当与RelativeLayout一起使用时,这不起作用,其中布局的高度和宽度设置为wrap_content (57认同)
  • 不要与`android:layout_gravity ="center"`混淆,它会做其他事情. (29认同)
  • 这对我不起作用(`android:gravity ="center"`).它仍然显示在屏幕的最左侧.:( (9认同)
  • 如果我想将TextView相对于另一个视图对齐,但它的文本本身居中? (3认同)
  • 在相对布局中,如果您设置:`android:layout_width =“wrap_content”``android:layout_height =“wrap_content”`和`android:gravity =“center”`对我有用。 (3认同)
  • 别忘了,还有`center_veritcal`和`center_horizo​​ntal`. (2认同)
  • @Rob,相对布局提供 android:layout_centerInParent="true" (2认同)
  • 我需要确保高度设置为“match_parent”,然后才能使“gravity =“center””除了水平工作之外还可以垂直工作。(因为如果我将其保留为换行内容,即使内容位于父级的角落,它也不会“看起来”像居中,尽管技术上是居中的,但高度小于父级) (2认同)
  • 关键是android:layout_height =“ match_parent”和android:gravity =“ center”。如果height为“ wrap_content”,它将不起作用。 (2认同)
  • 这使 TextView 居中,问题是如何使 TextView 中的文本居中,我相信答案是:- ```android:textAlignment="center"``` (2认同)

小智 433

android:gravity="center" 
Run Code Online (Sandbox Code Playgroud)

这样就可以了

  • textview必须是match_parent或fill_parent才能工作.如果它的包装内容,那么它将不会居中. (32认同)
  • @KalelWade:使用wrap_content在文本视图中居中文本完全没有意义.也许您正在考虑在父视图中居中文本视图,在这种情况下,您可以将此行简单地放在父视图中. (6认同)
  • 如果宽度和高度等于“wrap_content”的 TextView 位于宽度和高度为“match_parent”的 LinearLayout 内,那么您需要设置 Linear_layout 的 layout_gravity。 (2认同)
  • @MooingDuck,当高度为“wrap_content”且重力为“center_vertical”时,它在设计(预览)中绘制为居中,但在设备中它位于顶部。因此,将高度设置为“match_parent”并将重力设置为“center_vertical”或“c​​enter”。 (2认同)

小智 289

您还可以使用以下命令动态设置它:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)

  • 或者只是textview.setGravity(Gravity.CENTER); (141认同)
  • @Kenju如果您希望它可以轻松编辑,并且在运行时期间值不会改变:XML.如果必须实时更改值(例如,在用户按下按钮时更改对齐),则只能通过Java执行此操作. (2认同)
  • @GustavoMaciel所以,基本上是xml,除非它需要动态修改......现在我明白了.感谢您的简单而有用的答案! (2认同)

小智 112

android:layout_centerInParent="true"
Run Code Online (Sandbox Code Playgroud)

当与RelativeLayout一起使用时,这适用于布局的高度和宽度设置为wrap_content.

  • 这使TextView居中,而不是文本. (19认同)
  • 当`TextView`中有自动换行时,这不起作用.文本将是`TextView`中的全宽和多行AND左对齐.它将在显示屏上显示为左对齐.您应该使用其他答案中指定的"重力". (2认同)

Szo*_*tki 78

您也可以使用组合:

android:gravity="left|center"
Run Code Online (Sandbox Code Playgroud)

然后,如果textview宽度大于"fill_parent",则文本仍然会对齐到左边(不是居中,重力设置只是"center").


Gag*_*ngh 53

应用重力:

TextView txtView = (TextView) findViewById(R.id.txtView);
txtView.setGravity(Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)

对于垂直:

txtView.setGravity(Gravity.CENTER_VERTICAL);
Run Code Online (Sandbox Code Playgroud)

在XML中:

<TextView      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"
    android:text="@string/Hello_World"        
/>
Run Code Online (Sandbox Code Playgroud)


Cri*_*rra 40

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

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"
/>
Run Code Online (Sandbox Code Playgroud)

对于您的特定场景,重力值将是:

center_vertical|center_horizontal
Run Code Online (Sandbox Code Playgroud)

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


Mav*_*1st 39

如果您正在使用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>
Run Code Online (Sandbox Code Playgroud)


Nag*_*ddy 36

您需要设置TextView Gravity(中心水平和中心垂直),如下所示:

android:layout_centerHorizontal="true"   
Run Code Online (Sandbox Code Playgroud)

android:layout_centerVertical="true"
Run Code Online (Sandbox Code Playgroud)

并动态使用:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)

  • layout_ *告诉View的父对象要放置的位置。如果不使用layout_ *,则会告诉View如何放置其组件 (2认同)

小智 32

在我看来,

android:gravity="center"
Run Code Online (Sandbox Code Playgroud)

比...更好

android:layout_centerInParent="true"
Run Code Online (Sandbox Code Playgroud)

哪个好,

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
Run Code Online (Sandbox Code Playgroud)

至少用于格式化文本.


Kar*_*yan 27

对于线性布局:在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"
/>
Run Code Online (Sandbox Code Playgroud)

要在运行时执行此操作,请在您的活动中使用此类内容

TextView textView1 =(TextView)findViewById(R.id.texView1);
textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)

对于相对布局:在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"
/>
Run Code Online (Sandbox Code Playgroud)

要在运行时执行此操作,请在您的活动中使用此类内容

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);
Run Code Online (Sandbox Code Playgroud)


ven*_*enu 22

在XML文件中使用.

布局文件

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:text="@string/stringtext"/>
Run Code Online (Sandbox Code Playgroud)

要么:

在Java类中使用它

TextView textView =(TextView)findViewById(R.id.texviewid);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)


小智 20

用于相对布局

android:layout_centerInParent="true"
Run Code Online (Sandbox Code Playgroud)

以及其他布局

android:gravity="center" 
Run Code Online (Sandbox Code Playgroud)


Avi*_*kar 16

如果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>
Run Code Online (Sandbox Code Playgroud)

对于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>
Run Code Online (Sandbox Code Playgroud)


noo*_*oob 15

使用重力适用于TextView时,在API级别17中实现了另一种方法 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
Run Code Online (Sandbox Code Playgroud)

不知道差异,但它也有效.但仅适用于API级别17或更高级别.


Yud*_*ira 13

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>
Run Code Online (Sandbox Code Playgroud)


小智 11

您可以gravity将文本视图设置为CENTER.


use*_*er1 11

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

textview.setGravity(Gravity.CENTER)
Run Code Online (Sandbox Code Playgroud)


dys*_*oko 10

如果您尝试将文本放在TableLay中的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>
Run Code Online (Sandbox Code Playgroud)


Md.*_*lam 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" />
Run Code Online (Sandbox Code Playgroud)


Nir*_*jan 9

如果您使用相对布局:

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_centerInParent="true"/>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是LinearLayout

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_gravity="center"/>
Run Code Online (Sandbox Code Playgroud)


Sea*_*hay 9

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

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Run Code Online (Sandbox Code Playgroud)


rga*_*ber 8

正如上面提到的许多答案都可以.

android:gravity="center"
Run Code Online (Sandbox Code Playgroud)

如果你想垂直居中:

android:gravity="center_vertical"
Run Code Online (Sandbox Code Playgroud)

或只是横向:

android:gravity="center_horizontal"
Run Code Online (Sandbox Code Playgroud)


小智 7

只需在XML文件中,将textview gravity设置为center:

<TextView
    android:gravity="center" />
Run Code Online (Sandbox Code Playgroud)


Att*_*tif 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>
Run Code Online (Sandbox Code Playgroud)

对于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>
Run Code Online (Sandbox Code Playgroud)

和pro-grammatically parent是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);
Run Code Online (Sandbox Code Playgroud)


Ani*_*nil 7

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" />
Run Code Online (Sandbox Code Playgroud)


小智 7

试试这个方法,它会起作用

<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>
Run Code Online (Sandbox Code Playgroud)


Kam*_*ate 7

您可以这样做以使文本居中

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />
Run Code Online (Sandbox Code Playgroud)


Alp*_*iya 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)


Arg*_*CEO 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"
/>
Run Code Online (Sandbox Code Playgroud)

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"
/>
Run Code Online (Sandbox Code Playgroud)

XML方法03

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:gravity="center"
    android:text="@strings/text"
/>
Run Code Online (Sandbox Code Playgroud)

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"
/>
Run Code Online (Sandbox Code Playgroud)

Java方法01

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Run Code Online (Sandbox Code Playgroud)

Java方法02

textview.setGravity(Gravity.CENTER);
Run Code Online (Sandbox Code Playgroud)

Java方法03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
Run Code Online (Sandbox Code Playgroud)


Cha*_*ghe 6

使用 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"
         />
Run Code Online (Sandbox Code Playgroud)


Muk*_*las 5

中心文字

<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>
Run Code Online (Sandbox Code Playgroud)

如果你在线性布局中有textview,你需要将它们设置为中心重力