TextView的setGravity()无法在Java中工作

12

我卡在一个问题上,不知道是什么原因导致的。 我有一个非常简单的布局,就像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
    android:id="@+id/my_text_view"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_gravity="NOTE_THIS"
    android:textColor="#FFFFFF"
    android:textSize="22dp"
    android:text="TestText"/>
</LinearLayout>

我有一个TextView,它包含在另一个布局中。如果我在xml中更改重力(Gravity),则在布局编辑器和手机上都能看到相同的效果。但是,如果我想以编程方式应用重力,例如使用myTextView.setGravity(Gravity.CENTER),它将不会改变任何东西。而且我无法在Java中为TextView设置LayoutGravity。

为了调试目的,我已经尝试了三次包含每个TextView,每次使用不同的重力(Gravity),这样可以正常工作。因此,我认为我的布局没问题,可能存在Bug或者其他我遗漏的东西。有人能给我一些提示,我还能尝试什么,或者导致这个问题的原因是什么吗?

3个回答

30

将你的TextView宽度设置为android:layout_width="fill_parent",然后可以使用myTextView.setGravity(Gravity.CENTER)通过编程来设置它的位置。


在将 TextView 的宽度设置为 "fill_parent" 后,如何获取其 intrinsicWidth?因为 getWidth() 方法返回的是父 LinearLayout 的宽度。 - Rafael T
为什么你只需要设置重力? - waqaslam
因为它不仅设置重力,还调整文本大小,如果我得到了正确的宽度,它就能正常工作。 - Rafael T
“调整文本大小”是指更改文本大小吗?这不应该是可能的。 - waqaslam

7
您需要设置LayoutParams对象的gravity属性,而不是View本身:

您需要设置LayoutParams对象的gravity属性,而不是View本身:

TextView tv = new TextView(getApplicationContext());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);
lp.gravity = Gravity.CENTER;
tv.setLayoutParams(lp);

2
当您将LinearLayout用作父级时,layout_gravity会对齐控件但不对齐控件内的内容,因此,请使用android:gravity而不是android:layout_gravity。

啊,抱歉是我的错...我想设置LayoutGravity,因为Gravity没有任何作用...我更新了我的问题。 - Rafael T

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