我正在使用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);
答案 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);