我可以使用android:gravity="底部|center_horizontal"在xml文本视图上得到我想要的结果,但我需要通过编程来做到这一点。我的textview是在一个表内,如果这是一个相对布局。

我试过:

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

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


当前回答

labelTV.setGravity(Gravity.CENTER | Gravity.BOTTOM);

Kotlin版本(感谢Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

还有,你说的是重力还是布局重力?后者在相对布局中不起作用。

其他回答

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

记住使用

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

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

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

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

这相当于下面的xml代码

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

使用这段代码

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

Kotlin版本(感谢Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

还有,你说的是重力还是布局重力?后者在相对布局中不起作用。

通过做几件事解决了这个问题,首先得到我的TextView的高度和潜水它的文本大小,以获得与TextView可能的行总数。

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

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

TextView.setMaxLines(maxLines);

一旦超过最大行数,将重力设置为底部,它将自动向下滚动。

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

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

TextView.append("Your Text");

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