android - 为无广告用户从 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);
}
}
}});
}
解决方案
首选方式是remove()
从AdView
其父级。
为什么不将可见性设置为 GONE?
如果您将可见性设置为 GONE,则 AdView 仍会请求广告服务器填写广告,因此最好完全删除AdView
.
例如 -
在布局文件中添加 AdView,如果用户通过 IAP 删除了广告,只需调用myLayout.removeView(mAdView);
runOnUiThread()
如果您turnAdvertsOnOff()
从 ui 线程调用,也无需调用。
推荐阅读
- amazon-web-services - 适用于多租户的 AWS Appsync GraphQL OnCreate 订阅解析器
- ms-access - 如何在访问中使用 dlookup 功能自动填充文本框
- c# - 使用已安装证书的强名称程序集
- javascript - 在仪表板的地图上添加一些标记
- php - wordpress,Aliexpress 直销插件
- python - Python,json,附加到一行字典{}{}{}{}{},我如何一一阅读?
- xml - 从odoo中的日期计算Odoo Days?
- android - Flutter Android TV 应用水平 ListView 点击项目问题
- azure-web-app-service - 手动将 azureml docker 映像部署到应用服务
- javascript - AWS Lambda 通过 1 个 Lambda 调用调用 3 个异步函数