2010-10-23 13 views

risposta

20

Ecco una soluzione più semplice: creare un nuovo tipo di preferenza che visualizza un singolo annuncio. Puoi quindi includere quel tipo di preferenza nella definizione xml per le tue preferenze per visualizzare uno o più annunci.

personalizzato preferenza:

public class AdmobPreference extends Preference 
{ 

    public AdmobPreference(Context context) { 
     super(context, null); 
    } 

    public AdmobPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected View onCreateView(ViewGroup parent) { 
      //override here to return the admob ad instead of a regular preference display 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     return inflater.inflate(R.layout.admob_preference, null); 
    } 

} 

layout XML per AdmobPreference:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res/<YOUR PACKAGE>" 
    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" myapp:backgroundColor="#000000" myapp:primaryTextColor="#FFFFFF" 
     myapp:secondaryTextColor="#CCCCCC" /> 
</LinearLayout> 

E poi basta aggiungere qualcosa di simile nelle vostre preferenze definizione xml:

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

    <YOUR PACKAGE NAME.AdmobPreference android:key="ad" /> 

    ... other preferences ... 
</PreferenceScreen> 
+1

Sembra che questo farà scorrere l'annuncio con il resto dell'elenco delle preferenze. – pmont

1

È possibile implementare lo schermo di un impostazioni in due modi:

  1. utilizzare il framework preferenze in modo che il file delle preferenze XML automatico crea il layout preferenze e tutte le sue funzionalità
  2. Scrivi la attività tu stesso, cioè al caricamento mostra le preferenze attuali, come vengono mostrate, salvale, usando un normale file XML di layout che crei

Sospetto che tu stia aggiungendo l'oggetto AdMob a un file XML che non può gestirlo e può gestire onlky gli elementi preferenza. Per favore pubblica il tuo file XML e specifica quale errore di trasmissione stai vedendo.

Se si desidera il controllo finale sul contenuto della schermata delle preferenze, quindi implementarlo come un'attività normale, quindi è possibile eseguire qualsiasi operazione.

3

Sono riuscito a rispondere per conto mio, quindi posterò la soluzione qui nel caso in cui qualcun altro abbia la stessa domanda.

Ho aggiunto un TabActivity e l'attività Preferenze standard, quindi ho annidato le Preferenze in una scheda di TabActivity. Ciò significa che ho un normale layout xml per TabActivity che posso inserire una view (o qualsiasi altro tipo di vista) all'interno e ho ancora la schermata delle preferenze generate che funziona all'interno di quella.

Codice in materia di TabActivity

public class SettingsTabActivity extends TabActivity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.tablayout); 

     TabHost tabHost = getTabHost(); // The activity TabHost 
     TabHost.TabSpec spec; // Resusable TabSpec for each tab 
     Intent intent; // Reusable Intent for each tab 

     // Create an Intent for the regular live wallpaper preferences activity 
     intent = new Intent().setClass(this, Preferences.class); 

     // Initialize a TabSpec and set the intent 
     spec = tabHost.newTabSpec("TabTitle").setContent(intent); 
     spec.setIndicator("TabTitle"); 

     tabHost.addTab(spec); 

     tabHost.setCurrentTab(0);  
    } 
} 

Codice in materia di tablayout.xml

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

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res/*your package name goes here for admob*" 
    android:id="@android:id/tabhost" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout android:orientation="vertical" 
      android:layout_width="fill_parent" android:layout_height="fill_parent"> 

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

      <TabWidget android:id="@android:id/tabs" 
        android:layout_width="fill_parent" android:layout_height="1dp" 
        android:tabStripEnabled="false" android:visibility="invisible" /> 

      <FrameLayout android:id="@android:id/tabcontent" 
        android:layout_width="fill_parent" android:layout_height="fill_parent" 
        android:padding="1dp" /> 
    </LinearLayout> 
</TabHost> 

Impostazione android: visibility = "invisibile" e Android: layout_height = "1DP" nel tag TabWidget significa che la l'utente non può dire che è in realtà una scheda

+0

Grazie. Vedi questo per posizionare l'annuncio in fondo: http://stackoverflow.com/questions/8583861/adding-adview-below-tabhost-in-xml – pmont

2

Grazie , Stavo davvero cercando questo.

Solo un avvertimento: se si utilizza questo metodo per la produzione di codice e si utilizza Proguard dovete dire Proguard non per codificare l'AdmobPreference di classe, altrimenti il ​​gonfiatore sarà Fc.

Aggiungere questa riga al vostro proguard.cfg:

-keep public class * extends android.preference.Preference 
2

Per coloro che chiedono come implementare questo con un PreferenceFragment, ecco una soluzione, non v'è alcuna necessità di creare un personalizzato Preference:

in primo luogo creare un nuovo layout (qui chiamato settings.xml nella cartella risorse di layout) che verrà gonfiato nella PreferenceFragment:

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

    <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="wrap_content" 
      ads:adUnitId="XXXXX" 
      ads:adSize="SMART_BANNER" 
      android:layout_alignParentTop="true" /> 

    <ListView android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/adview" /> 

</RelativeLayout> 

Quindi, utilizzare questo layout nel PreferenceFragment, caricarlo nel metodo onCreateView:

private AdView adView; 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.settings, null); 

     adView = (AdView)v.findViewById(R.id.adview); 

     //** Adview */ 
     if(Tools.isNetworkConnected(getActivity())){ 
      adView.setVisibility(View.VISIBLE); 
     } 
     else{ 
      adView.setVisibility(View.GONE); 
     } 

     //Create ad banner request 
     AdRequest adBannerRequest = new AdRequest.Builder() 
//  .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) 
//  .addTestDevice("XXXXX") 
     .build(); 

     // Begin loading banner 
     adView.loadAd(adBannerRequest); 

     return v; 
    } 

Non dimenticate di aggiungere il seguente codice per la nuova versione di Admob utilizzando i servizi di Google Play:

@Override 
    public void onResume() { 
     super.onResume(); 
     if(adView != null){ 
      adView.resume(); 
     } 
    } 

    @Override 
    public void onPause() { 
     if(adView != null){ 
      adView.pause(); 
     } 
     super.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     if(adView != null){ 
      adView.destroy(); 
     } 
     super.onDestroy(); 
    } 
+0

La creazione di una preferenza personalizzata ti consente di inserire facilmente gli annunci tra le impostazioni/altre preferenze. Mentre la soluzione consente solo di inserire un annuncio nella parte inferiore o superiore delle impostazioni. –

+0

Sì, sono d'accordo, ma la domanda è chiedere una soluzione per mettere l'annuncio in cima, ed è ciò che sta facendo il mio codice. –

0
@Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     ViewGroup linear = (ViewGroup) view; 
     while (!(linear instanceof LinearLayout)) 
      linear = (ViewGroup) linear.getParent(); 
     AdView adView = new AdView(); 
     linear.addView(adFrame); 
    } 
Problemi correlati