以编程方式将TextView文本居中


86

在这里,我要宽容一些,我只是从Android SDK教程开始,而我正在尝试一些有趣的东西,这些东西不在教程本身中,但我希望会很容易。

我试图TextView通过代码水平和垂直居中放置一个项目(我可以用XML很好地做到这一点)。我已经看到了几个在父级是表或其他对象时如何执行此操作的示例,但我希望这对我来说更容易理解。(ps请随时纠正我的术语)。

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

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常数而无法定位的内容,因此我不确定该方法的作用范围。据我了解,居中和content_wrapping + gravity是两个独立的东西。我想要一个在这种情况下如何做的示例,以及在API文档中可能如何找到答案的示例?


为什么要全部将textview作为根布局?
Kalpesh Lakhani 2012年

确定,让我再试一次,因为我在这里找不到删除或编辑按钮。我认为主容器是相对布局,因为它正在使用(我认为)我的activity_display_message.xml。本教程的源代码有点复制/粘贴,但它位于:bit.ly/VDh9yS <RelativeLayout xmlns:android = “ schemas.android.com/apk/res/android ” xmlns:tools =“ schemas.android.com/tools ” android:layout_width =“ match_parent” android:layout_height =“ match_parent”工具:context =“。DisplayMessageActivity”> < / RelativeLayout>
亚历克斯·萨默斯

看到我编辑好的答案可能会对您有帮助。.:)
Kalpesh Lakhani 2012年

Answers:


246
yourTextView.setGravity(Gravity.CENTER);

完美,简短而甜蜜!像魅力一样工作!我还看到有CENTER_HORIZONTAL和CENTER_VERTICAL属性。谢谢史蒂夫!
亚历克斯·萨默斯

2
请注意,这仅在android:textAlignment="gravity"属性设置为重力的情况下有效。否则,textAlignment会覆盖。
velis

1
用于以编程方式设置textAlignment;yourTextView.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
Yusril Maulidan Raji

25

动态居中

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

细分的版本的textView.setGravity(Gravity.CENTER);,也是一个不错的解决方案。谢谢Nirav!
亚历克斯·萨默斯

希望我可以,我是新手,但代表不足以投票支持它。我要给Hari很好的检查原因,因为您的答案都是正确的,可怜的人可以使用该代表;)不能从您的答案同样有用的事实中减去。(如果我的代表晋升时有机会,请确保你们两个都投赞成票!)
亚历克斯·萨默斯

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

还有更多可用


5

这肯定可以工作..

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);
params.addRule(LinearLayout.CENTER_IN_PARENT);
textView.setLayoutParams(params);
textView.setGravity(Gravity.CENTER);

layout.addView(textView);

setcontentView(layout);

2
从android.widget.LinearLayout继承时,LinearLayout似乎没有CENTER_IN_PARENT属性;我想念什么吗?
亚历克斯·萨默斯

2

尝试添加以下代码以将布局参数应用于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属性。
亚历克斯·萨默斯

2

如果文本大小较小,则应将文本视图的宽度设置为“ fill_parent”。之后,您可以将TextView Gravity设置为center:

TextView textView = new TextView(this);
textView.setText(message);
textView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
textView.setGravity(Gravity.CENTER);

1

您可以使用以下内容以编程方式使TextViewKotlin中的文本居中:

textview.gravity = 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

这两个需要一起工作。ing了一段时间。

numberView.textAlignment = View.TEXT_ALIGNMENT_CENTER
 numberView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.