【发布时间】:2021-07-31 21:00:35
【问题描述】:
我可以通过如下图所示的 XML 布局成功实现这一点:
然后在 Java 中尝试这样做时,我无法获得与屏幕截图中相同的结果:
这是呈现上述结果的 Java 代码:
FrameLayout frameLayout = new FrameLayout(this.context);
FrameLayout.LayoutParams layoutparams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL);
frameLayout.setLayoutParams(layoutparams);
ImageView bodyImageView = new ImageView(this.context);
bodyImageView.setBackgroundResource(R.drawable.niners);
TextView bodyTextView = new TextView(this.context);
bodyTextView.setBackgroundColor(Color.TRANSPARENT);
bodyTextView.setText("SF");
bodyTextView.setTextColor(Color.YELLOW);
bodyTextView.setGravity(Gravity.BOTTOM);
frameLayout.addView(bodyImageView);
frameLayout.addView(bodyTextView);
谁能看到我遗漏了什么或做错了什么?
更新:
根据屏幕截图下方的响应,结果如下:
【问题讨论】:
-
以
layout_开头的XML 属性是View上的LayoutParams的设置,而不是View本身的设置。您需要为TextView创建一个LayoutParams,以说明layout_width、_height和_gravity;例如,new FrameLayout.LayoutParams(MATCH_PARENT, WRAP_CONTENT, Gravity.Bottom)。ImageView不一定需要任何东西,因为FrameLayout包装了它。您还需要修复setGravity()调用,除非FrameLayout本身在另一个FrameLayout中,否则在其上设置FrameLayout.LayoutParams可能没有意义。 -
不确定你是如何使用布局得到这个结果的,逻辑上父级是
wrap_content,而TextView是match_parent;那么这意味着wrap_content并且您以编程方式获得.. 如果您对FrameLayout以外的任何其他类型的布局感兴趣,请告诉我 -
@Zain 我没有嫁给 framelayout,但据我了解,framelayout 是唯一可以用来将一个元素覆盖在另一个元素上的布局?!我需要图像视图位于图像视图的“背景”中,文本视图位于图像视图的“前景”中,如第一张图像所示。
-
Zain 对我没有想到的
TextView提出了一个很好的观点。不过,您可以使用它的layout_gravity来纠正它,您可以在代码中将其更改为Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL。 (除非你真的想要背景底部的灰色条纹。现在还不清楚你到底要做什么。) -
@MikeM。是的,灰色条纹也是需要的。
标签: android android-layout android-framelayout