2011-02-16 20 views

Respuesta

27

Lo que también puede hacer es crear una preferencia personalizada que se pueda agregar fácilmente a cualquier pantalla de preferencias.

Agregue un archivo de diseño llamado ad_layout.xml a su carpeta res/layout que AdMob completará más adelante.

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

Crear una clase llamada AdPreference así:

package com.example.adpreference; 

import com.google.ads.AdRequest; 
import com.google.ads.AdSize; 
import com.google.ads.AdView; 

import android.app.Activity; 
import android.content.Context; 
import android.preference.Preference; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

public class AdPreference extends Preference { 

    public AdPreference(Context context, AttributeSet attrs, int defStyle) {super (context, attrs, defStyle);} 
    public AdPreference(Context context, AttributeSet attrs) {super(context, attrs);} 
    public AdPreference(Context context) {super(context);} 

    @Override 
    protected View onCreateView(ViewGroup parent) { 
     // this will create the linear layout defined in ads_layout.xml 
     View view = super.onCreateView(parent); 

     // the context is a PreferenceActivity 
     Activity activity = (Activity)getContext(); 

     // Create the adView 
     AdView adView = new AdView(activity, AdSize.BANNER, "<your add id>"); 

     ((LinearLayout)view).addView(adView); 

     // Initiate a generic request to load it with an ad 
     AdRequest request = new AdRequest(); 
     adView.loadAd(request);  

     return view;  
    } 
} 

Ahora en el archivo XML preferencia sólo se puede añadir añadir cualquier posición que desee (en la parte superior o entre cualquier otra preferencia).

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

    ... 

    <com.example.adpreference.AdPreference android:layout="@layout/ad_layout"/> 

    ... 
</PreferenceScreen> 
+0

esto es realmente genial ... me ayudó con un problema realmente grande que estaba teniendo. – dell116

+0

buen trabajo, me hace feliz –

+1

y también tenemos que destruir adView !? –

15

Sí, un PreferenceActivity es sólo una subclase de ListActivity y, como con ListActivity, puede especificar su propio diseño personalizado con tal de que contiene una ListView con un ID de android.R.id.list. Así que crea cualquier archivo de diseño XML que necesites que contenga un ListView y un AdView y usa ese diseño para el PreferenceActivity.

+0

impresionante tipo !! Gracias – Sourabh

13

La respuesta de Dan Dyer es correcta. Me gustaría elaborar un poco, solo para aclarar con el ejemplo. Puede usar un diseño como este (llamado config.xml en res/layout).

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:myapp="http://schemas.android.com/apk/res/com.xxxx" android:layout_height="fill_parent" 
       android:layout_width="fill_parent"> 

    <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/> 

    <com.admob.android.ads.AdView 
      android:id="@+id/ad" 
      android:layout_alignParentBottom="true" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      myapp:backgroundColor="#000000" 
      myapp:primaryTextColor="#FFFFFF" 
      myapp:secondaryTextColor="#CCCCCC"/> 

</RelativeLayout> 

En su actividad que se extiende PreferenceActivity se escribe algo como esto en el método onCreate;

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.config); 
    } 
+0

impresionante Dude Thanx – Sourabh

2
ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.list).getParent().getParent().getParent(); 
viewGroup.addView(new AdView(...)); 
+0

Debe agregar más información a su respuesta. No tengo idea de dónde debería colocar esto, qué hace esto, etc. –

+1

@SuperThomasLab, debe colocarlo en su actividad de preferencia. En onCreate, por ejemplo. Pensé que era obvio. ¿Qué hace esto? Bueno, lee la documentación. – kreker

0

Hay algunos cambios en P.Melch respuesta en clase Adpreference es como abajo (porque no su trabajo con la última biblioteca de anuncios de Google Play):

public class AdPreference extends Preference { 

    public AdPreference(Context context, AttributeSet attrs, int defStyle) {super (context, attrs, defStyle);} 
    public AdPreference(Context context, AttributeSet attrs) {super(context, attrs);} 
    public AdPreference(Context context) {super(context);} 

    @Override 
    protected View onCreateView(ViewGroup parent) { 
     // this will create the linear layout defined in ads_layout.xml 
     View view = super.onCreateView(parent); 

     // the context is a PreferenceActivity 
     Activity activity = (Activity)getContext(); 

     AdView adView = new AdView(getContext()); 
     adView.setAdUnitId("<your ad id>"); 
       adView.setAdSize(AdSize.BANNER); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     adView.loadAd(adRequest); 
     ((LinearLayout)view).addView(adView); 
     return view; 
    } 
} 
Cuestiones relacionadas