如何设置android:重力TextView从Java端在android

我可以在textview上使用xml中的android:gravity="bottom|center_horizontal"来获得我想要的结果,但我需要以编程方式做到这一点。我的textview在tablerow中,如果这在relativelayout中很重要的话。

我试过:

LayoutParams layoutParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
labelTV.setLayoutParams(layoutParams);

但如果我理解正确,这将适用于tablerow,而不是textview?

277886 次浏览

这将使文本在文本视图中居中:

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);
labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Kotlin版本(感谢Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

另外,你是在谈论重力还是layout_gravity?后者在使用中不起作用。

我们可以像下面这样在任何视图上设置布局重力

myView = findViewById(R.id.myView);
myView.setGravity(Gravity.CENTER_VERTICAL|Gravity.RIGHT);
or
myView.setGravity(Gravity.BOTTOM);

这相当于下面的xml代码

<...
android:gravity="center_vertical|right"
...
.../>

你应该使用textView.setGravity(Gravity.CENTER_HORIZONTAL);

记住使用

LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
layoutParams2.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

不能工作。这将为小部件设置重力,而不是为文本设置重力。

使用这段代码

        TextView textView = new TextView(YourActivity.this);
textView.setGravity(Gravity.CENTER | Gravity.TOP);
textView.setText("some text");
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

这将设置你的textview的重力。

通过做几件事来解决这个问题,首先得到我的TextViewheight,并通过文本size潜水,以获得TextView可能的总行数。

int maxLines = (int) TextView.getHeight() / (int) TextView.getTextSize();

在你得到这个值之后,你需要将你的TextView maxLines设置为这个新值。

TextView.setMaxLines(maxLines);

一旦超过最大行数,将Gravity设置为Bottom,它将自动向下滚动。

if (TextView.getLineCount() >= maxLines) {
TextView.setGravity(Gravity.BOTTOM);
}

为了使它正确工作,你必须使用append()TextView,如果你setText(),这将不起作用。

TextView.append("Your Text");

这个方法的好处是,它可以动态地使用,而不管你的TextViewheight和文本size。如果你决定修改你的布局,这段代码仍然可以工作。