gpt4 book ai didi

Android FrameLayout 和 TextView - 为什么 LayoutParams 在 setGravity() 不起作用的地方起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:45 30 4
gpt4 key购买 nike

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

那么首先, TextView.setGravity() 到底有什么用? (编辑:我现在理解得更好了,谢谢!尽管问题的以下部分仍然不清楚。)

其次,似乎以这种方式更新 FrameLayout 的唯一方法是使用您想要的设置创建一个新的 FrameLayout.LayoutParams 对象,然后使用 setLayoutParams() 方法应用它。 (这似乎会自动更新 View ,因此是否需要调用 requestLayout()?) 是否有一种更简单/更直接的方法来实现 FrameLayout 的...比如说,无需创建新的 LayoutParams像我现在这样反对?

谢谢!作为引用,下面是一个(有效的)代码 fragment ,显示了我如何设置此 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);

最佳答案

1) view.setGravity 意味着 View 应该如何定位如果 child 。 在 textview 的情况下,它指的是文本的定位。 在线性布局或 View 组中,它指的是它的 subview 。

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

我注意到的另一件事是,您为 textview 提供了宽度和高度作为包装内容,这只会占用文本的大小。因此,赋予重力没有意义,因为 textview 没有额外的区域来将文本定位到中心。您需要将 TextView 的宽度指定为 fill_parent。那应该使您的重力属性起作用。

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

如果您希望您的 textview 包装内容,那么您应该将您的 textview 添加到线性布局并将 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);

关于Android FrameLayout 和 TextView - 为什么 LayoutParams 在 setGravity() 不起作用的地方起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7537873/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com