2014-06-29 5 views
0

J'ai créé une application Android avec les nouvelles annonces sdk, mais elle est invisible. Je l'ai eu dans une application précédente, ça marche bien là-bas. Maintenant, dans ma nouvelle application, j'ai fait la même chose. Mais:Android AdView non visible - mais cliquable

L'AdView n'est pas visible, mais peut être cliqué. Si vous revenez à votre écran d'accueil (il suffit de réduire au minimum, ne vous arrêtez pas!) Et de le rouvrir, l'annonce s'affichera.

Mon fichier XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:ads="http://schemas.android.com/apk/lib/com.google.android.gms.ads" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#000000" 
android:orientation="vertical" > 

<org.andengine.opengl.view.RenderSurfaceView 
    android:id="@+id/SurfaceViewId" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentTop="true" 
    android:gravity="center" /> 

<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/adViewId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    ads:adUnitId="XXX" 
    ads:adSize="BANNER" /> 

</RelativeLayout> 

Et ma méthode onCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    adView = (AdView) findViewById(R.id.adViewId); 

    AdRequest adRequest = new AdRequest.Builder().build(); 

    adView.loadAd(adRequest); 

    v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
} 

EDIT:. Après 60 secondes, la vue devient visible.

Répondre

2

Votre problème est que vous vous avez dit RenderSurfaceView à matchParent forits hauteur. Cela signifie qu'il va consommer tout l'espace de son parent en ne laissant aucun pour l'AdView.

Essayez ceci:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:ads="http://schemas.android.com/apk/lib/com.google.android.gms.ads" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#000000" 
android:orientation="vertical" > 

<org.andengine.opengl.view.RenderSurfaceView 
    android:id="@+id/SurfaceViewId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:gravity="center" /> 

<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/adViewId" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    ads:adUnitId="XXX" 
    ads:adSize="BANNER" /> 

</LinearLayout> 

Il utilise layout_weight avec LinearLayout d'avoir votre RenderSurfaceView se dilater pour remplir tout l'espace vertical inutilisé.

+0

Fondamentalement, cela fonctionne. Dans mon cas, la largeur de RenderSurfaceView est devenue plus petite, mais je suis sûr que vous pourriez résoudre ce problème. Tiré d'une autre question ici, j'ai trouvé cette solution: Appelez toute méthode qui met à jour l'annonce. Cela fonctionne bien pour moi: 'adView.setBackgroundColor (Color.BLACK);' Mais en réalité, votre solution fonctionne. – Ercksen

+0

Vous feriez mieux de ne pas forcer une touche de l'interface utilisateur. Configurez-le correctement pour commencer. Le code ci-dessus devrait avoir affecté la largeur de votre RenderView de quelque façon que ce soit, qui sent quelque chose d'autre qui ne va pas avec votre code. – William

0

Peut-être que vous avez oublié la mise en œuvre de ces méthodes importantes

public void onPause() { 
    super.onPause(); 
    this.adView.pause(); 
} 

public void onResume() { 
    super.onResume(); 
    this.adView.resume(); 
} 
+0

Non, ce n'est pas le problème. Aussi appeler explicitement ces méthodes (onResume() dans ce cas) ne fonctionne pas. – Ercksen