2012-07-01 11 views
7

he declarado en el manifiesto como AdMobadmob androide cambiar el tamaño en el paisaje

<activity 
      android:name="com.google.ads.AdActivity" 
      android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
      /> 

Se cambia de tamaño correctamente al dispositivo de rotacion pero ahora debe añadir android:configChanges="keyboardHidden|orientation" a la actividad que contiene AdMob con el fin de prevenir la actividad de recarga. Lo estoy alcanzando, pero ahora AdMob no se escala cuando el paisaje. Evento onConfigChanges Ahora podría forzar que se modifique el tamaño de AdMob con las dimensiones de paisaje adecuadas. ¿Cómo? gracias.

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
    } 
+0

Relacionados con http://stackoverflow.com/questions/20929963/admob-ad-not-resizing-correctly-upon-screen-orientation-includes-pictures y http://stackoverflow.com/questions/26703152/smart -banner-container-view-wont-resize –

Respuesta

10

Me enfrenté al mismo problema, pero encontré una solución alternativa.

Mi AdView se encuentra en la parte inferior de la página, dentro de un diseño relativo. Parece correcto cuando está cargado, así que supuse que el LayoutParams era correcto. Para solucionar este problema, tuve que eliminar todo del RelativeLayout, crear un nuevo AdView y volverlo a agregar en el orden correcto, con el LayoutParams original.

Algo así como:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    AdView adView = (AdView)findViewById(R.id.adView); 
    View contentFrame = findViewById(R.id.contentFrameLayout); 

    RelativeLayout parent = (RelativeLayout) adView.getParent(); 
    LayoutParams mapFrameParams = contentFrame.getLayoutParams(); 
    LayoutParams adViewParams = adView.getLayoutParams(); 

    parent.removeView(adView); 
    parent.removeView(contentFrame); 

    AdView newAdView = new AdView(this, AdSize.SMART_BANNER, getString(R.string.admob_pubId)); 

    newAdView.setId(R.id.adView); 

    parent.addView(newAdView, adViewParams); 
    parent.addView(contentFrame,mapFrameParams); 
    newAdView.loadAd(new AdRequest()); 
} 

Esto funciona para mí, pero todavía se siente como un truco.

+0

Mi aplicación requiere compatibilidad con api level 4, por lo que onConfigurationChanged no es compatible. ¿No hay otra forma de manejar esto? –

+1

Por si alguien necesita la solución para el nivel de api <8, solo tiene que agregar @TargetApi (8) antes de @Override. –

+0

Puede ser un truco, pero funciona. Gracias – Matt

3

Pruebe esta configuración:

<com.google.ads.AdView 
    android:id="@+id/adView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    ads:adSize="SMART_BANNER" 
    ads:adUnitId="@string/adkey" 
    ads:loadAdOnCreate="false" 
    android:focusable="false" /> 

El SMART_BANNER selecciona automáticamente el mejor tamaño y el tipo de su anuncio.

En su método onConfigurationChanged, simplemente solicitará un nuevo anuncio para el AdView.

Tenga en cuenta que es posible que necesite agregar xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads".

+1

banner se solicita correctamente de nuevo cuando la rotación del dispositivo con su sugerencia, pero permanece en el mismo tamaño – Jaume

+3

Tengo el mismo problema, el banner se solicita correctamente nuevamente cuando la rotación del dispositivo con su sugerencia, pero permanece en el mismo tamaño, ¿has arreglado esto? – Giuseppe

+4

Creo que el adView calcula su tamaño cuando se agrega al diseño, no cuando recibe el anuncio (sin embargo, esto sería bueno), así que creo que esa es la razón por la que esto no funciona. –

3

No hay suficiente representante para responder directamente pero usted es correcto Justin Smith. Como dice Eric Leichtenschlag aquí, https://groups.google.com/forum/#!msg/google-admob-ads-sdk/8Ch7VmAm7RE/34Tdw6Zz4jAJ, se necesita recrear AdView si está utilizando SMART_BANNER

Lo que hice fue eliminar el adView del diseño, destruir la vista, recrearlo, volver a agregarlo al diseño y luego emitir un AdRequest .

+2

Gracias por la fuente, no creo que haya visto eso todavía. –

Cuestiones relacionadas