Android,如何在不使用XML布局的情况下添加新视图

4

我需要有经验的人的一点帮助。我希望这很容易。 我只想在主程序视图上方显示新视图(创建它时不使用XML布局)。 这是为了集成AdMob.com广告块:

我写了这样的代码:

AdView ad = new AdView(this); 
ad.layout(10, 10, 100, 100); 
ad.setVisibility(View.VISIBLE); 
ad.bringToFront(); 
ad.requestFocus(); 
ad.invalidate();

你看,什么都没帮助,没有窗口可见
我做错了什么?谢谢!

附言:我在ActivityonCreate(Bundle)中制作了它,但我也尝试在其他位置。

1个回答

6
您还没有告诉系统要绘制什么或在哪里绘制。您需要查看有关Activity的setContentView(view)文档。如果您想将其绘制在当前屏幕上,请查看Dialog(和setContentView)的文档。
当我以编程方式创建任意视图以在现有布局中绘制时,我通常会在我的布局XML中添加一个FrameLayout标记,然后在代码中调用findViewById(),然后我可以使用该FrameLayout视图将视图添加到其中(addView())。
希望这些内容能对您有所帮助,而无需为您编写代码。

谢谢您的回复。我已经通过使用XML并使用RelativeLayout或AbsoluteLayout重新制作所有应用程序来解决了问题。 - Vadim
@lilbyrdie:我正在使用与您相同的方法,但当我尝试将以编程方式构建的视图添加到在XML中声明的Frame Layout时,应用程序会强制关闭。因此,当我执行Frame Layout myFrameView.addView(viewBuiltProgrammatically)时,它失败了。您认为这是为什么? - Namratha
@Namratha:您需要检查错误输出以查看异常文本的内容。没有任何信息可供参考,我猜测您可能错过了某个设置或设置了不允许的内容。 - lilbyrdie
我遇到了可怕的IllegalStateException异常: java.lang.IllegalStateException: 指定的子视图已经有一个父视图。您必须先在子视图的父视图上调用removeView()方法。我尝试调用((ViewGroup)child.getParent()).removeView(child)),但它并没有起作用。在某些情况下,child.getParent()返回null,在另一种情况下,removeView似乎根本没有效果(之后调用addView仍然会导致IllegalStateException异常)。 - Zennichimaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接