如何在Android中从Java端将android:gravity设置为TextView


218

我可以android:gravity="bottom|center_horizontal"在textview的xml 中使用以获得所需的结果,但是我需要以编程方式进行此操作。我的textview在a内tablerow是否重要relativelayout

我努力了:

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

但是,如果我理解正确,那可以将其应用于tablerow,而不是textview吗?

Answers:


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

Kotlin版本(感谢Thommy)

labelTV.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM

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


谢谢你的工作。我现在错过了那个,感到有点傻。最初的问题是在文本字段上设置边距。我猜想是因为我找不到setGravity()方法,也不存在setGravity。
Nate

7
谢谢+1,我找到了文档,但是像往常一样,它只进行了一半,没有明确说明我从(Gravity.CENTER等)处获得重力常数。
海因杜普莱西斯(Hein du Plessis)

1
对于像我这样从Google来到这里的人来说,科特林的方式是:it.gravity = Gravity.CENTER_HORIZONTAL or Gravity.BOTTOM
Thommy

对我来说,科特林方式迷惑,为什么orand?!?!
ZooMagic

38

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

TextView ta = (TextView) findViewById(R.layout.text_view);
LayoutParams lp = new LayoutParams();
lp.gravity = Gravity.CENTER_HORIZONTAL;
ta.setLayoutParams(lp);

5
那没用。“ lp.gravity无法解析或不是字段”
Nate

那很奇怪,因为这段代码对我来说可以正常工作和编译。您将如何设置textview的权重,因为它们不是setWeight()方法?
射频

4
我发现了问题。Nate正在导入android.view.ViewGroup。该类具有不同的方法,并且不会编译。您应该改为导入android.view.WindowManager。
Finnboy11 2012年

当文本视图位于线性布局内时,应更好地导入android.widget.LinearLayout.LayoutParams。否则,您会收到ClassCastException
tomm,2015年

谢谢,它有效。但这不是一个完整的解决方案,因为LayoutParams这里没有定义类型,并且可能会有所不同,因此无法编译。您应该知道父布局(例如LinearLayout),然后在此处编写。
CoolMind

7

我们可以在任何视图上设置布局重力,如下所示:

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

这相当于下面的xml代码

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

布局重力与重力不同
Zvonimir Peran

3

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

记住使用

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

将无法正常工作。这将为小部件而不是文本设置重力。



2
textView.setGravity(Gravity.CENTER | Gravity.BOTTOM);

这将设置您的textview的重力。


0

通过做一些事情解决了这个问题,首先获取heightmy的内容TextView,然后按文本size进行潜水,以获取可能的总行数TextView

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

获得此值后,需要将您的TextView maxLines值设置为新值。

TextView.setMaxLines(maxLines);

设置GravityBottom一次线的最高金额已经超过,它会自动向下滚动。

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

为了这个正常工作,你必须使用append()TextView,如果setText()这是不行的。

TextView.append("Your Text");

这种方法的好处是可以动态使用它,而不管heightTextView和文本的使用情况如何size。如果您决定修改布局,则此代码仍然有效。

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.