我正在将AdMob集成到我的应用中,我想知道如何正确停用广告。我想让用户能够禁用它们。由于错误的印象,我不想让AdMob遇到任何问题。这种方式是正确的还是我应该考虑一下?
AdView ads = (AdView) findViewById(R.id.ad);
ads.setEnabled(false);
答案 0 :(得分:33)
在你的布局文件中(例如,main.xml):
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/adsContainer">
<com.admob.android.ads.AdView
android:id="@+id/admobAds"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
app:backgroundColor="#000000"
app:primaryTextColor="#FFFFFF"
app:secondaryTextColor="#CCCCCC">
</LinearLayout>
然后在你的代码中(例如,在“if”块内)
(LinearLayout) adscontainer = (LinearLayout) findViewById(R.id.adsContainer);
View admobAds = (View) findViewById(R.id.admobAds);
adscontainer.removeView(admobAds);
这将“永久”(对于应用的生命周期)从layou中删除广告,这意味着不会有任何广告请求。
答案 1 :(得分:26)
我还想让用户能够停用广告 - 为什么要强迫别人看到他们不想要的广告?你为什么要指望人们为这个选择买单呢?
无论如何,我在this article概述了我是如何做到这一点的。这篇文章更详细,但这里是相关部分:
我用来关闭广告的代码:
private void hideAd() {
final AdView adLayout = (AdView) findViewById(R.id.adView1);
runOnUiThread(new Runnable() {
@Override
public void run() {
adLayout.setEnabled(false);
adLayout.setVisibility(View.GONE);
}
});
}
然后重新开启(万一有人感到慷慨)
private void showAd() {
final AdView adLayout = (AdView) findViewById(R.id.adView1);
runOnUiThread(new Runnable() {
@Override
public void run() {
adLayout.setEnabled(true);
adLayout.setVisibility(View.VISIBLE);
adLayout.loadAd(new AdRequest());
}
});
}
答案 2 :(得分:3)
创建一个从AdView派生的新类;
package com.MyApp;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
public class MyAdView extends com.google.ads.AdView {
public MyAdView(Activity activity, AdSize adSize, String adUnitId) {
super(activity, adSize, adUnitId);
if (MyApp.m_ads_enabled) {
AdRequest adRequest = new AdRequest();
loadAd(adRequest);
}
}
public MyAdView(Context context, AttributeSet attrs)
{
super(context, attrs);
if (MyApp.m_ads_enabled) {
AdRequest adRequest = new AdRequest();
loadAd(adRequest);
}
}
MyAdView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
if (MyApp.m_ads_enabled) {
AdRequest adRequest = new AdRequest();
loadAd(adRequest);
}
}
使用MyAdView
而非常规AdView
定义您的广告,并将loadAdOnCreate
属性设置为false
,例如;
<com.MyApp.MyAdView android:id="@+id/adView" android:layout_width="wrap_content" android:layout_height="wrap_content" ads:adUnitId="0" ads:adSize="BANNER" ads:loadAdOnCreate="false"/>
然后,根据MyApp.m_ads_enabled
的价值,当您致电setContentView()
时,广告将被停用或启用。
这种方法的优势在于,在广告被停用的情况下,由于广告永远不会被请求,因此不会使用任何数据带宽,这对于有限或PAYG数据合同的某些人来说非常重要。
答案 3 :(得分:1)
setVisibility(VIEW.GONE);将从布局中删除广告。
可能会将其从布局中完全删除,但我从来没有这样做过。
答案 4 :(得分:1)
给予你所有的一切,只为了安全起见:
if (mAdView != null) {
mAdView.setEnabled(false);
mAdView.setVisibility(View.GONE);
ViewGroup parent = (ViewGroup) mAdView.getParent();
if (parent != null) parent.removeView(mAdView);
mAdView.removeAllViews();
mAdView.destroy();
}
答案 5 :(得分:1)
将视图的可见性设置为 GONE 就足够了。
如果您阅读Logcat输出,则会打印&#34;我/广告:广告不可见。没有刷新广告。&#34; 。
答案 6 :(得分:0)
我不确定删除广告视图后布局是否会重新流转;如果没有,您可以创建相同的(缺少广告除外)布局。在OnCreate中,选择正确的布局。然后,您只需要确保在用户进行选择后触发配置更改(可能已经发生,具体取决于您如何选择 - 例如从首选项屏幕返回)。
答案 7 :(得分:0)
创建一个名为Ads
的类
像这样
`公共类广告{ public static boolean Show(AdView mAdView){
if(mAdView != null){
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
return true;
}
return false;
}
public static void Remove(AdView mAdView,ViewGroup parent){
root.removeView(mAdView);
}
public static void Remove(AdView mAdView,RelativeLayout mLayout){
mLayout.removeView(mAdView);
}
public static void Remove(AdView mAdView, LinearLayout mLayout){
mLayout.removeView(mAdView);
}
}
现在将其导入要从中删除AdView的类中
使用Ads.Remove(AdView, parent);
删除它。
Ads.Remove("the add view itself", the ViewGroup or layout where it is");