为无广告用户安全地从 LinearLayout 中删除 AdView
Safely Removing an AdView from a LinearLayout for Ad Free Users
我有一个 Android 应用程序,里面有横幅广告。我只在检查了要显示的广告后才将 AdView 元素放入 LinearLayout。
但是,用户可以在节目的 运行 时间内购买 NoAds。这意味着我必须安全地停止广告并从程序中删除 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,AdView 仍会请求广告服务器填写广告,因此最好完全删除AdView
。
例如-
在布局文件中添加 AdView,如果用户通过 IAP 删除了广告,只需调用 myLayout.removeView(mAdView);
此外,如果您从 ui 线程调用 turnAdvertsOnOff()
,则无需调用 runOnUiThread()
。
我有一个 Android 应用程序,里面有横幅广告。我只在检查了要显示的广告后才将 AdView 元素放入 LinearLayout。
但是,用户可以在节目的 运行 时间内购买 NoAds。这意味着我必须安全地停止广告并从程序中删除 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,AdView 仍会请求广告服务器填写广告,因此最好完全删除AdView
。
例如-
在布局文件中添加 AdView,如果用户通过 IAP 删除了广告,只需调用 myLayout.removeView(mAdView);
此外,如果您从 ui 线程调用 turnAdvertsOnOff()
,则无需调用 runOnUiThread()
。