J'ai ceci dans mon fichier xml principal:
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
ads:adUnitId="******************"
ads:adSize="BANNER"
Android:id="@+id/adView"/>
J'ai déjà défini la taille de l'annonce et l'ID de l'unité, mais lorsque cela est exécuté (à partir de MainActivity.Java),
AdView adView = (AdView)this.findViewById(com.example.lovetestactual.R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
Il a jeté une exception à ce qui est dans le titre.
J'ai trouvé une solution dans l'exemple github, c'est-à-dire:
au lieu de
xmlns:ads="http://schemas.Android.com/apk/lib/com.google.ads"
supprimer la balise xmlns: ads *** et ajouter
xmlns:ads="http://schemas.Android.com/apk/res-auto"
balise à votre balise LinearLayout comme suit:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="@string/hello"/>
<com.google.Android.gms.ads.AdView Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"/>
</LinearLayout>
C'est ça :)
Avertissement: Assurez-vous que vous définissez la taille de l'annonce et l'ID du bloc d'annonces de la même manière (c'est-à-dire que vous définissez les deux en XML ou les deux par programme).
De nombreuses personnes qui migrent des applications existantes vers la méthode des services Google Play ajoutent incorrectement des informations erronées.
Je voudrais souligner que de nombreuses personnes ayant la même question l'utilisent comme modèle
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/lib-auto"
Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="50dp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"
ads:loadAdOnCreate="true" >
</com.google.Android.gms.ads.AdView>
Ceci est incorrect car xmlns: les annonces doivent être remplacées par: - xmlns:ads="http://schemas.Android.com/apk/res-auto"
Ainsi
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/adView"
Android:layout_width="match_parent"
Android:layout_height="50dp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"
ads:loadAdOnCreate="true" >
</com.google.Android.gms.ads.AdView>
Cela va être vague car vous n'avez pas précisé le type de vue de votre fichier XML (relatif, linéaire, etc.)
Dans mon application avec une disposition relative déroulante, j'ai inclus:
<RelativeLayout
Android:id="@+id/test"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_below="@+id/TextView07"
Android:paddingTop="20dp" >
</RelativeLayout>
Maintenant, dans ma classe actuelle, je ne veux pas l'annonce que j'ai incluse:
private AdView adView;
/* Your ad unit id. Replace with your actual ad unit id. */
private static final String AD_UNIT_ID = "ca-app-pub-xxxxxx/yyyyyy";
/**
* Simply loads the xml about page layout to display the text.
*/
public void onCreate(Bundle start) {
super.onCreate(start);
setContentView(R.layout.about);
final TelephonyManager tm = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
//String deviceid = tm.getDeviceId();
adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
// Add the AdView to the view hierarchy. The view will have no size
// until the ad is loaded.
RelativeLayout layout = (RelativeLayout) findViewById(R.id.test);
layout.addView(adView);
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
.build();
//.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
//.addTestDevice(deviceid).build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
}
Maintenant, idéalement, vous souhaitez utiliser une bannière intelligente pour optimiser votre mise en page pour tous les appareils, comme je l'ai ci-dessus, c'est standard maintenant.
Si ce n'est pas de l'aide, rendez-vous sur ici
supprimer xmlns:ads="http://schemas.Android.com/tools"
de la vue racine
puis ajoutez AdView
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/adView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.Android.gms.ads.AdView>
N'oubliez pas ces étapes:
Vous pouvez définir xmlns:ads="http://schemas.Android.com/apk/res-auto"
À la racine voir lui-même.
si vous n'avez pas défini xmlns:ads="http://schemas.Android.com/apk/res-auto"
dans rootView, vous devez ajouter xmlns:ads="http://schemas.Android.com/apk/res-auto"
dans AdView.
si vous avez défini adSize à l'intérieur de votre fichier xml AdView
, ne définissez pas dynamiquement, comme: adView.setAdSize(AdSize.BANNER);
sinon il le fera via une exception Java.lang.IllegalStateException: The ad size can only be set once on AdView.
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Et xmlns:app="http://schemas.Android.com/apk/res-auto"
Se ressemblent mais il y a une différence qui est xmlns: ads et xmlns: app alors ne vous y trompez pas .
Je pense que cela résoudra votre problème ... Heureux de vous aider :)
J'ai essayé de changer la déclaration d'espace de noms mais cela ne fonctionne tout simplement pas. J'ai résolu ce problème en spécifiant une valeur de hauteur pour adView au lieu de wrap_content
. Ça marche pour moi
<com.google.Android.gms.ads.AdView
Android:id="@+id/adView2"
Android:layout_width="match_parent"
Android:layout_height="50dp"
Android:layout_alignParentBottom="true"
Android:layout_centerHorizontal="true"
Android:layout_gravity="center|bottom"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id" />
J'ai rencontré ce même problème car je n'ajoute pas cette ligne sur xmlns:ads="http://schemas.Android.com/apk/res-auto"
sommet de . Ensuite, je change mon code xml comme ça
<com.google.Android.gms.ads.AdView
xmlns:ads="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/adView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
ads:layout_constraintLeft_toLeftOf="parent"
ads:layout_constraintRight_toRightOf="parent"
ads:layout_constraintTop_toTopOf="parent"
ads:layout_constraintBottom_toTopOf="@+id/headerText"
Android:layout_marginTop="@dimen/_2sdp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
Android:visibility="visible">
</com.google.Android.gms.ads.AdView>
après cela, j'ajoute cette 3 ligne dans la méthode onCreate
AdView mAdView = (AdView)findViewById(R.id.adView);
MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);