首页 > 解决方案 > 为无广告用户从 LinearLayout 中安全移除 AdView

问题描述

我有一个带有横幅广告的 Android 应用程序。在我检查了要显示的广告后,我才将 AdView 元素放入 LinearLayout 中。

但是,用户可以在程序运行期间购买 NoAd。这意味着我必须安全地停止广告并从程序中删除 Adview,而不会违反无法隐藏广告的 Admob 规则。

这是我的代码,但我非常不确定if该行语句中的部分if (mAdView != null) { // It might not be created yet

那只是隐藏它,而不是完全删除它吗?:

public void turnAdvertsOnOff(boolean on) {
    advertsOn = on;

    // IMPORTANT - changes to layout must be done on the UI Thread or will get error
    m_Context.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            LinearLayout myLayout;
            // NEW
            //AdView mAdView;

            myLayout = (LinearLayout) m_Context.findViewById(R.id.myLayout);
            //mAdView = (AdView) m_Context.findViewById(R.id.adView);

            if(advertsOn){
                if(mAdView == null && myLayout != null) {
                    // Create it and add it to the LinearLayout
                    mAdView = new AdView(m_Context);
                    // Sizes BANNER, SMART_BANNER, LARGE_BANNER
                    mAdView.setAdSize(AdSize.SMART_BANNER);
                    mAdView.setAdUnitId(adIdBanner);
                    myLayout.addView(mAdView);
                }
                if (mAdView != null) mAdView.setVisibility(View.VISIBLE);
            }else {
                if (mAdView != null) { // It might not be created yet
                    mAdView.pause();
                    mAdView.setEnabled(false);
                    mAdView.setVisibility(View.GONE);
                    //mAdView.destroy();
                    //mAdView.setVisibility(View.INVISIBLE);
                    //mAdView.pause();
                    //mAdView.setVisibility(View.GONE);
                }
            }
        }});
}

标签: androidandroid-linearlayoutadview

解决方案


首选方式是remove()AdView其父级。
为什么不将可见性设置为 GONE?
如果您将可见性设置为 GONE,则 AdView 仍会请求广告服务器填写广告,因此最好完全删除AdView.

例如 -
在布局文件中添加 AdView,如果用户通过 IAP 删除了广告,只需调用myLayout.removeView(mAdView);

runOnUiThread()如果您turnAdvertsOnOff()从 ui 线程调用,也无需调用。


推荐阅读