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


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


1688
2018-01-11 00:27


起源


将layout_width和layout_height设置为fill_parent,然后将gravity设置为center。那就行了 - Amila
fill_parent现在已弃用,因此请在layout_width和layout_height中使用MATCH_PARENT,并将TextView的重力设置为居中。 - Bilal Ahmad


答案:


我假设你正在使用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);


2655
2018-01-11 01:53



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


android:gravity="center" 

这样就可以了


398
2018-02-08 22:54



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


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

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

268
2017-11-21 12:25



或者只是textview.setGravity(Gravity.CENTER); - Amplify91
决定选择哪种方式,写入xml或写入Java文件的判断标准是什么? - phi
@Kenju如果您希望它可以轻松编辑,并且在运行时期间值不会改变:XML。如果必须实时更改值(例如,在用户按下按钮时更改对齐),则只能通过Java执行此操作。 - Gustavo Maciel
@GustavoMaciel所以,基本上是xml,除非它需要动态修改......现在我明白了。感谢您的简单而有用的答案! - phi
多数民众赞成,谢谢你 - Moritz Schmidt


android:layout_centerInParent="true"

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


97
2017-11-11 00:58



这使TextView居中,而不是文本。 - anthropomo
当有自动换行时,这不起作用 TextView。文本将是全宽和多行并且在左边是对齐的 TextView。它将在显示屏上显示为左对齐。您应该使用其他答案中指定的“重力”。 - David Manpearl


您也可以使用组合:

android:gravity="left|center"

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


68
2018-01-01 20:11





应用重力:

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

44
2018-05-30 05:34





如果您正在使用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>

35
2018-05-13 11:57



有趣。必须检查它是否对LinearLayout(TableRow父级)有效。 - Martin


你需要设置 TextView Gravity (中心水平和中心垂直)像这样:

android:layout_centerHorizontal="true"   

android:layout_centerVertical="true"

并动态使用:

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

33
2018-05-15 05:03



代码语义错误。更换 layout_centerhorizontal 和 layout_centervertical 通过 layout_centerHorizontal 和 layout_centerVertical (“H”和“V”为大写,否则不起作用)。 - yugidroid
layout_ *告诉View的父级想要的位置。没有layout_ *告诉View如何放置它的组件 - Dandre Allison


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

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

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


32
2017-10-17 12:11





我的想法是,

android:gravity="center"

比...更好

android:layout_centerInParent="true"

哪个更好,

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

至少用于格式化文本。


29
2017-07-16 04:28





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

26
2018-01-03 03:58