Android FrameLayout和TextView - 为什么LayoutParams在setGravity()没有的地方工作?

时间:2011-09-24 08:21:56

标签: android textview layoutparams

我正在使用FrameLayout在屏幕上显示(按需)某些文字。我希望文本在某个地方,所以我认为setGravity()可以完成这项工作......但不,它似乎对文本的去向没有任何影响(而像ImageView这样的其他对象甚至没有这个方法)。

首先, TextView.setGravity()用于什么? (编辑:我现在明白了这一点,谢谢!尽管如此,仍然不清楚问题的以下部分。)

其次,以这种方式更新FrameLayout似乎唯一的方法是使用您想要的设置创建一个新的FrameLayout.LayoutParams对象,然后使用setLayoutParams()方法应用它。 (这似乎是自动更新视图所以是必要的requestLayout()调用吗?)并且有一种更简单/更简单的方法来实现这一点,而不是创建一个新的LayoutParams我现在正在做什么?

谢谢!作为参考,下面是一个(工作)代码片段,展示了我如何设置这个FrameLayout和TextView。

    FrameLayout fl1 = new FrameLayout(this);
    FrameLayout.LayoutParams flp1 = new FrameLayout.LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    fl1.setId(9001);
    fl1.setLayoutParams(flp1);
      .....
    tv1 = new TextView(this);
    FrameLayout.LayoutParams tvp1 = new FrameLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
        (Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM));
    tv1.setId(9006);
    tv1.setLayoutParams(tvp1); // This works
    tv1.setBackgroundColor(Color.GRAY);
    tv1.setTextColor(Color.BLACK);
    tv1.setText("Dynamic layouts ftw!");
    tv1.setGravity(Gravity.CENTER); // This does NOT work
     .....
    fl1.addView(tv1);

2 个答案:

答案 0 :(得分:2)

tv1.setGravity(Gravity.CENTER);

属于TextView TEXT 的引力。

正如documentation所述:

  

设置文本和垂直重力的水平对齐方式   当TextView中有额外的空间时,将使用它   文本本身需要什么。

答案 1 :(得分:2)

1)view.setGravity意味着如果是孩子,视图应该是位置。    在textview的情况下,它指的是文本的定位。    在线性布局或视图组中,它引用其子视图。

2)我检查了你的代码。您已经在使用textview.setGravity方法。在这种情况下,您不需要在FrameLayout.LayoutParams构造函数中指定重力参数。

我注意到的另一件事是你给textview的宽度和高度作为换行内容,它只占用文本的大小。因此,给予重力毫无意义,因为textview没有额外的区域来将文本定位到中心。您需要将textview的宽度指定为fill_parent。这应该会使你的引力属性发挥作用。

顺便说一句这是关于Gravities的非常好的文章。它解释了重力和layout_gravity属性。

如果您希望textview包装内容,那么您应该将textview添加到linearlayout并将setgravity添加到线性布局。

这应该是你想要做的事情

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
FrameLayout fr = new FrameLayout(this);
fr.setLayoutParams(lp);
fr.setBackgroundColor(Color.RED);

LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
LinearLayout l = new LinearLayout(this);
l.setLayoutParams(lp2);
l.setGravity(Gravity.CENTER);
l.setBackgroundColor(Color.BLUE);

ViewGroup.LayoutParams vp = new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT);
TextView t = new TextView(this);
t.setLayoutParams(vp);
t.setText("Blessan Mathew");
t.setBackgroundColor(Color.CYAN);

l.addView(t);
fr.addView(l);