ChatGPT解决这个技术问题 Extra ChatGPT

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

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

将 layout_width 和 layout_height 都设置为 fill_parent,然后将重力设置为 center。这样就行了
fill_parent 现在已弃用,因此在 layout_width 和 layout_height 中使用 MATCH_PARENT 并将 TextView 的重力设置为中心。

R
Ryan M

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


当与布局的高度和宽度设置为 wrap_content 的 RelativeLayout 一起使用时,这不起作用
@Rob,如果宽度和高度是 wrap_content,那么从技术上讲,文本已经居中。
如果我想将 TextView 相对于另一个视图对齐,但它的文本本身是居中的?
这对我不起作用 (android:gravity="center")。它仍然显示在屏幕的最左侧。 :(
不要与 android:layout_gravity="center" 混淆,它会做其他事情。
d
darryn.ten
android:gravity="center" 

这会成功的


textview 必须是 match_parent 或 fill_parent 才能工作。如果它的包装内容,那么它不会居中。
@KalelWade:使用 wrap_content 在文本视图中居中文本根本没有意义。也许您正在考虑在父视图中将文本视图居中,在这种情况下,您只需将此行放在父视图中。
@Mooing Duck 因此,不使用包装内容的原因 - 它没有意义。但是当你要么应对和粘贴或只是匆忙时,你可能不会把两个和两个放在一起。这就是我提到它的原因。
如果宽度和高度等于“wrap_content”的TextView在宽度和高度“match_parent”的LinearLayout中,那么您需要设置Linear_layout的layout_gravity。
@MooingDuck,当高度为“wrap_content”且重力为“center_vertical”时,它以设计(预览)为中心绘制,但在设备中它位于顶部。因此,将高度设为“match_parent”并将重力设置为“center_vertical”或“center”。
z
zeevb

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

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

或者只是 textview.setGravity(Gravity.CENTER);
选择哪种方式,写xml还是写Java文件的判断标准是什么?
@Kenju,如果您希望它易于编辑并且值在运行时不会更改:XML。如果您必须实时更改值(例如,在用户按下按钮时更改对齐方式),那么您只能通过 Java 来完成。
@GustavoMaciel 所以,基本上是xml,除非它需要动态修改......现在我明白了。感谢您的简单而有用的回答!
s
sth
android:layout_centerInParent="true"

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


这使 TextView 居中,而不是其中的文本。
TextView 中有自动换行时,这不起作用。文本将在 TextView 内为全角、多行和左对齐。它将在显示屏上显示为左对齐。您应该使用其他答案中指定的“重力”。
Z
Zapnologica

您还可以使用以下组合:

android:gravity="left|center"

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


a
ayz4sci

应用重力:

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

P
Piyush

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

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

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


P
Peter Mortensen

如果您使用 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 父级)有效。
P
Peter Mortensen

您需要像这样设置 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);

代码语义是错误的。将 layout_centerhorizontallayout_centervertical 替换为 layout_centerHorizontallayout_centerVertical(“H”和“V”为大写,否则将不起作用)。
layout_* 告诉 View 的父级它想要在哪里。没有 layout_* 告诉 View 如何放置它的组件
a
anthropomo

在我看来,

android:gravity="center"

比,

android:layout_centerInParent="true"

这比,

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

至少用于格式化文本。


v
valerybodak

对于线性布局:在 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);

P
Peter Mortensen

在 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);

佚名

将此用于相对布局

android:layout_centerInParent="true"

和其他布局

android:gravity="center" 

N
Naveen Kumar Sangwan

如果 TextView's 的高度和宽度为 wrap content,则 TextView 内的文本始终居中。但如果 TextView's 宽度为 match_parent 且高度为 match_parentwrap_content 则您必须编写以下代码:

对于相对布局:

<?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>

对于线性布局:

<?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>

n
noob

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

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

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


这将真正使 TextView 中的文本居中。如果你只使用重力,会有一些尾随填充,这取决于文本是什么......例如,如果你有一个小圆圈徽章,中间有文本,你会看到一个非常明显的区别。
C
Catalina

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>

C
Chathura Wijesinghe

使用android:textAlignment="center"

https://i.stack.imgur.com/l0Fzk.png

       <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 上面的例子没有任何问题。
它是否在没有对父级或布局重力本身的重力的情况下工作?它不会文本对齐将在其视图边界内对齐文本,因此在这种情况下直到 textView 采用 match_parent 之前,如果没有其父布局中的重力或 layout_gravity 本身,它看起来不会像这样
U
User1

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

textview.setGravity(Gravity.CENTER)

P
Piyush

您只需将 textview 的 gravity 设置为 CENTER


A
Alpesh Sorathiya

TextView 重力根据您的父布局工作。

线性布局:

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

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

https://i.stack.imgur.com/9cxnM.png

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

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

顺便说一句,您回滚到上一个版本的任何原因?您还原的修订版是一种很好的做法,因此编辑器提到的内容可以帮助文本编辑器进行编码。
感谢您的android:gravity="center_horizontal"android:layout_gravity="center_vertical"
d
dyslexicanaboko

如果您尝试在 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>

N
Niranjan

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

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

如果您使用的是线性布局

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

Z
Zain

试试这个方法,它会工作

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

P
Peter Mortensen

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

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

A
Attif

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);

S
Seanghay

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

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

r
rgamber

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

android:gravity="center"

如果你想把它垂直居中:

android:gravity="center_vertical"

或只是水平:

android:gravity="center_horizontal"

P
Peter Mortensen

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

<TextView
    android:gravity="center" />

K
Kamlakar Kate

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

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

S
Sachin

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

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);