以编程方式将TextView文本居中显示

94

我在这里请求一些宽限,因为我刚开始学习Android SDK教程,并且我正在尝试一些有趣的东西,但这不是教程中的内容,但我希望这很容易。

我正在尝试通过编码水平和垂直地使TextView居中(我可以在XML中很好地完成此操作)。我已经看到了几个关于如何在父对象是表格或其他对象时执行此操作的示例,但我希望这对我更容易理解。(p.s.请随意纠正我的术语)。

这是来自教程/我的工作模型的示例代码:

package com.example.myfirstapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;


public class DisplayMessageActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        textView.setGravity(View.TEXT_ALIGNMENT_GRAVITY);

        setContentView(textView);
    }
}

我已经找到了setGravity方法,并尝试在其上使用setLayoutParams,但是我不确定应该导入什么内容来解决WRAP_CONTENT常量的问题。从我的理解来看,居中和内容包装+重力是两个不同的概念。我想要一个示例来同时实现这两个效果,以及我在API文档中应该如何查找答案。


为什么要将TextView作为根布局呢? - Kalpesh Lakhani
好的,让我们再试一次,因为我在这里找不到删除或编辑按钮。我认为主容器是相对布局,因为它正在使用(我认为)我的activity_display_message.xml文件。 此教程的源代码有点复制/粘贴,但位于以下位置:http://bit.ly/VDh9yS<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" tools:context=".DisplayMessageActivity" > </RelativeLayout> - Alex Summers
请查看我的编辑后的答案,它可能会对您有所帮助.. :) - Kalpesh Lakhani
9个回答

261
yourTextView.setGravity(Gravity.CENTER);

完美,简短而甜美!像魔法一样奏效!我还看到有CENTER_HORIZONTAL和CENTER_VERTICAL属性。谢谢Steve! - Alex Summers
2
请注意,只有当android:textAlignment="gravity"属性设置为gravity时,此功能才有效。否则,textAlignment会覆盖该属性。 - velis
3
设置文本对齐方式的代码为:yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY); - Yusril Maulidan Raji

26

用于动态居中

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

textView.setGravity(Gravity.CENTER); 的简化版本,同时也是一个可行且出色的答案。谢谢Nirav! - Alex Summers
很抱歉,我是新手,声望不够,无法点赞。我会选择给Hari采纳答案,因为你们两个的回答都非常准确,而可怜的Hari需要更多的声望;但这并不意味着你的回答不够有用。(如果我的声望提高了,我一定会给你们两个点赞!) - Alex Summers

8

这肯定会起作用。

RelativeLayout layout = new RelativeLayout(R.layout.your_layour); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
textView.setLayoutParams(params);
textView.setGravity(Gravity.CENTER);

layout.addView(textView);

setcontentView(layout);

3
继承自android.widget.LinearLayout的LinearLayout似乎没有CENTER_IN_PARENT属性;我是否漏掉了什么? - Alex Summers

7
TextView text = new TextView(this);

text.setGravity(Gravity.CENTER);

并且。
text.setGravity(Gravity.TOP);

并且。
text.setGravity(Gravity.BOTTOM);

并且。
text.setGravity(Gravity.LEFT);

并且

text.setGravity(Gravity.RIGHT);

并且。
text.setGravity(Gravity.CENTER_VERTICAL);

并且。
text.setGravity(Gravity.CENTER_HORIZONTAL);

还有更多可用的


2
您可以使用以下代码在 Kotlin 中编程使 TextView 文字居中:
textview.gravity = Gravity.CENTER

2
尝试添加以下代码将布局参数应用于TextView:

尝试添加以下代码,为TextView应用布局参数

LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(lp);

4
LinearLayout 似乎没有 CENTER_IN_PARENT 属性。 - Alex Summers

2
如果您的文本大小较小,应将文本视图的宽度设置为“fill_parent”。之后,您可以将TextView重心设置为中心:
TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);

1
尝试使用这个方法。
  public void centerTextView(LinearLayout linearLayout) {
    TextView textView = new TextView(context);
    textView.setText(context.getString(R.string.no_records));
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView.setGravity(Gravity.CENTER);
    textView.setTextSize(18.0f);
    textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
    linearLayout.addView(textView);
}

0

这两个需要一起才能正常工作。 我已经苦恼了一段时间。

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接