在 android 中使用带有 admob 的完全自定义视图

Posted

技术标签:

【中文标题】在 android 中使用带有 admob 的完全自定义视图【英文标题】:Using completely custom views with admob in android 【发布时间】:2011-10-21 03:15:17 【问题描述】:

我在理解布局时遇到了真正的问题。我正在尝试将 admob 放入我的应用程序中,但到目前为止,我还没有理由使用布局。我将向您展示我在活动课上的内容。

    public void onCreate(Bundle savedInstanceState)
    super.onCreate(savedInstanceState);
    View tfview = new TFView(this);
    setContentView(tfview);

然后我继续用 Java 编写整个应用程序,而不使用任何 XML。如何将此视图和 Admob 放到布局中?我尝试通过这样做将它们都添加到布局中:

LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout);
    AdView adView = new AdView(this, AdSize.BANNER, pubID);
    layout.addView(adView);
    layout.addView(tfview);
    AdRequest request = new AdRequest();
    request.setTesting(true);
    adView.loadAd(request);   

但我收到某种空指针异常错误。有人可以帮忙吗?

提前致谢 -德里克

【问题讨论】:

能贴出空指针异常错误吗? 顺便说一句,欢迎来到 ***!如果您觉得回复有帮助,请点赞。如果您发现某个回复回答了您的问题,请接受它。 这里是空指针,shrib.com/VRCyCu5Y 编辑:第 51 行是 layout.addView(adView); 【参考方案1】:

感谢您的所有回复。我最终只是阅读了对类似问题的其他一些回复,并以编程方式构建了我的布局(如果这是一个词)。所以基本上我是这样做的:

 AdView adView = new AdView(this, AdSize.BANNER, pubID);

    FrameLayout layout = new FrameLayout(this);
    FrameLayout.LayoutParams gameParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
            FrameLayout.LayoutParams.FILL_PARENT);
    FrameLayout.LayoutParams adsParams =new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, 
            FrameLayout.LayoutParams.WRAP_CONTENT, android.view.Gravity.BOTTOM|android.view.Gravity.CENTER_HORIZONTAL); 
    layout.addView(tfview, gameParams);
    layout.addView(adView, adsParams);
    setContentView(layout);
    AdRequest request = new AdRequest();
    request.setTesting(true);
    adView.loadAd(request);     

它就像一个魅力。再次感谢大家。

-德里克

【讨论】:

感谢您的回答。我做了一个游戏,我永远不需要使用任何 xml 布局。我有一些自定义视图,但无法放置横幅广告。但你的答案很完美。【参考方案2】:

确保 R.id.linearLayout 实际上是一个有效的 Id,它对应于您要添加 admob 内容的视图。

如果您想更好地处理 XML 布局(我建议您这样做,因为它们确实是您应该在 android 中进行布局的方式),请查看HelloViews tutorials。

【讨论】:

我新建了一个 xml 文件,并在其中添加了以下代码。 schemas.android.com/apk/res/android" android:id="@+id/layout" android:orientation="vertical" android:layout_ android:layout_> 然后我重命名为 R.id.layout 我在这里做错了吗?就像我说的,我只是不太了解布局。 没错,代码还是不行吗?另外,请参阅我编辑的回复。【参考方案3】:

假设您的 xml 文件是 res/layout 文件夹中的 main.xml,然后将内容视图设置为您的 main.xml 文件。

    setContentView(R.layout.main);

设置 contentView 定义了您从哪里提取资源。从您对 Kurtis 答案的评论来看,您的 xml 文件看起来不错,但您必须将 xml 文件设置为 contentView 才能引用其布局。这就是为什么你找不到那个视图,所以你的layout 变量是空的,它最终会导致异常。

【讨论】:

是的,我这样做了,但它仍然不喜欢它。

以上是关于在 android 中使用带有 admob 的完全自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

使用带有最新支持库的 admob 15.0.0 时发生 Gradle 冲突

在 admob 中显示某些类型的广告?

如何在统一游戏中投放 Admob 广告?

无法使用 adMob 在 android 上显示广告

我没有看到任何 admob 制作广告。在本机反应

我可以在同一个 Android 应用中使用 Admob 广告帐户和 Facebook 货币化帐户吗