以编程方式使用 AddView 时奇怪的上边距

Posted

技术标签:

【中文标题】以编程方式使用 AddView 时奇怪的上边距【英文标题】:Weird top margin when using AddView programmatically 【发布时间】:2014-07-04 08:15:19 【问题描述】:

我遇到了一个大问题,我正在尝试以编程方式添加 Imageview,但我遇到了一个奇怪的问题:

我在 XML 中只放入了一个与父级匹配的空相对布局。 代码方面,我在相对布局中添加了一个 imageview。

一切正常,图像视图可见且大小正确,但问题是“0,0”位置很奇怪。似乎它有一个上边距,而左边距正确地为 0。同样使用 SetX/SetY 将位置强制为“0,0”会导致这个奇怪的上边框:

图片:

代码:

base_layout = (RelativeLayout) findVieById(R.id.base_layout);

image_logo = New Imageview(this);
base_layout.AddView(image_logo);

image_logo.SetPadding(0,0,0,0);
image_logo.SetX(0);
image_logo.SetY(0);
image_logo.SetImageResource(R.drawable.generic_image);
image_logo.SetVisibility(View.VISIBLE);

我不明白为什么......清单中的活动有它通常的 Theme.NoTitleBar.Fullscreen 标志。

有什么帮助吗?将不胜感激!

【问题讨论】:

要快速获得有用的答案(并使您的问题更有帮助),请向我们展示您在代码中所做的工作,以便我们了解正在发生的事情。 您是否尝试将RelativeLayout 元素的填充设置为0? 嗨,我已经编辑了帖子。 嗨鲁迪,感谢您的快速回复。即使填充 0, 0, 0, 0 也不会显示该边框。我认为这与标题栏有关,但我不明白……使用 xml 效果很好。 您确定顶部的微小间隙不仅仅是电池寿命/无线信号和通知所在的栏吗? 【参考方案1】:

我使用RelativeLayout.LayoutParams 编写了一个示例并自己尝试了一下,一切似乎都运行良好。

 base_layout = (RelativeLayout) findViewById(R.id.base_layout);        
 ImageView image_logo = new ImageView(this);
 RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(width, height);
 image_logo.setLayoutParams(lp);
 base_layout.addView(image_logo);

上图运行时效果如下。

android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 已在清单中针对此 Activity 使用。

【讨论】:

使用全屏清单标志实际上隐藏了通知栏,但我不确定布局坐标是否也会受到影响。您认为添加以下内容会解决我的问题吗? getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);

以上是关于以编程方式使用 AddView 时奇怪的上边距的主要内容,如果未能解决你的问题,请参考以下文章

自动布局以编程方式导致 iphone 4 出现问题

带有“display:inline-flex”的元素有一个奇怪的上边距

如何在 iOS 中设置表格视图的上边距?

使用自动布局和 SnapKit 进行相对定位

如何解决IE7中使用CSS3 Pie时元素上边距消失的问题

故事板iOS - 如何以屏幕尺寸的百分比而不是静态值顶部引脚边距给出上边距?