2013-04-12 7 views
7

Ho sviluppato un gioco con MonoGame per alcuni mesi e l'ho appena pubblicato pochi giorni fa. Ora, sto cercando di far funzionare correttamente AdMob in modo da poter pubblicare una versione gratuita della app. Sono un novizio per i layout di Android, quindi non ho idea di cosa sto facendo.Come visualizzare l'annuncio AdMob nella parte inferiore dello schermo nell'app per Android con Xamarin/Monogame?

Sono stato in grado di visualizzare un annuncio all'interno della mia app dopo aver setacciato il Web per alcune informazioni sull'implementazione di AdMob con MonoGame, ma l'app viene sempre visualizzata nella parte superiore dello schermo. Ho avuto pochissima fortuna nel trovare informazioni sul riposizionamento dell'annuncio in modo specifico con MonoGame/Xamarin.

Ecco il codice che funziona, e visualizza l'annuncio sulla parte superiore dello schermo:

Activity1.cs:

public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity 
    { 
     internal View adView = null; 

     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      Game1.Activity = this; 
      var g = new Game1(); 
      FrameLayout fl = new FrameLayout(this); 
      fl.AddView(g.Window); 
      adView = AdMobHelper.CreateAdView(this, "<my id here>"); 
      var layoutParams = new ViewGroup.LayoutParams(Android.Views.ViewGroup.LayoutParams.FillParent, Android.Views.ViewGroup.LayoutParams.WrapContent); 

      fl.AddView(adView, layoutParams); 
      SetContentView(fl); 
      AdMobHelper.RequestFreshAd(adView); 
      g.Run(); 


     } 
    } 

Questo funziona senza layout aggiuntivi. Ora, ecco il codice che ho assimilato da alcuni siti web che coprono l'argomento:

Activity1.cs:

public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity 
    { 
     internal View adView = null; 

     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      Game1.Activity = this; 
      var g = new Game1(); 
      SetContentView(Resource.Layout.Main); 
      View gameView = FindViewById(Resource.Id.GameView); 
      ViewGroup parent = (ViewGroup)gameView.Parent; 
      int index = parent.IndexOfChild(gameView); 
      parent.RemoveView(gameView); 
      parent.AddView(g.Window, index); 
      adView = FindViewById(Resource.Id.Ad); 
      parent = (ViewGroup)adView.Parent; 
      index = parent.IndexOfChild(adView); 
      parent.RemoveView(adView); 
      var layoutParams = adView.LayoutParameters; 
      adView = AdMobHelper.CreateAdView(this, "<my id here>"); 
      adView.LayoutParameters = layoutParams; 
      parent.AddView(adView, index); 
      AdMobHelper.RequestFreshAd(adView); 
      g.Run(); 
     } 
    } 

e il mio ulteriore file di Main.axml:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <SurfaceView 
     android:id="@+id/GameView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
    <com.google.ads.AdView 
     android:id="@+id/Ad" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_gravity="bottom" /> 
</FrameLayout> 

Tuttavia, quando eseguo questo, corro in un arresto alla linea "SetContentView (Resource.Layout.Main);" in Activity1.cs. Visual Studio restituisce l'errore:

Unhandled Exception: 
Android.Views.InflateException: Binary XML file line #1: Error inflating class com.admob.android.ads.AdView 

Sebbene non ci siano errori nella finestra di output degli errori per controllare ... Qualsiasi aiuto? Idealmente, mi piacerebbe solo visualizzare questo annuncio di AdMob in fondo alla mia app. Grazie!

risposta

2

Questo è il codice per aggiungere admob. Ho fatto con successo, potrebbe funzionare per voi

<com.google.ads.AdView 
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
android:id="@+id/adView" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
ads:adSize="BANNER" 
ads:adUnitId="Your Admob 15 digit alpha numeric ID" 
/> 

e nella vostra attività, in modo onCreate aggiunge seguente codice

AdView adview = (AdView)findViewById(R.id.adView); 
AdRequest re = new AdRequest(); 
re.setTesting(true); 
adview.loadAd(re); 

Questo è un lavoro per me. Per maggiori dettagli è possibile visitare il sito AdMob

1

Soluzione # 2
Un modo rapido senza alcuna codifica è quello di aggiungere solo i xmlns all'elemento applicazione e ads:loadAdOnCreate="true" all'elemento adView in AndroidManifest.xml

0

Questo dovrebbe funzionare per voi, lo sto usando in questo modo senza problemi.

public class Activity1 : Microsoft.Xna.Framework.AndroidGameActivity 
{ 
    internal View adView = null; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     Game1.Activity = this; 
     var g = new Game1(); 
     FrameLayout fl = new FrameLayout(this); 
     LinearLayout ll = new LinearLayout(this); 
     ll.setOrientation(LinearLayout.VERTICAL); 
     ll.setGravity(Gravity.BOTTOM); 
     fl.AddView(g.Window); 
     adView = AdMobHelper.CreateAdView(this, "<my id here>"); 
     ll.addView(adView); 
     fl.AddView(ll); 
     SetContentView(fl); 
     AdMobHelper.RequestFreshAd(adView); 
     g.Run(); 


    } 
}