Come posso mettere un admview adview nella schermata delle impostazioni per uno background in diretta?

Ho visto la carta da parati live di Mario usa gli annunci admob nella schermata delle impostazioni, ma non sono stato in grado di farlo da me stesso. Se metto l'annuncio in settings.xml come se volessi con un layout normale, ottengo un'exception di cast di class.

Ecco uno screenshot della carta da parati live di mario per illustrare quello che sto cercando di fare.

  • Perché DialogPreference personalizzato non viene triggersto su ascoltatore onSharedPreferenceChanged?
  • Videocamera Android (visualizza) video (anche miniature)
  • Richieste HTTP periodiche che utilizzano RxJava e Retrofit
  • Posizione del button Android in modo programmato
  • il progetto android-MNC non verrà eseguito su dispositivi prima del livello API "android-MNC"
  • Cambiare l'orientamento dello schermo utilizzando un button
  • esempio di screenshot

  • Come creare annunci interstitial su android?
  • Admob - Il banner mostra uno background nero e nessun annuncio
  • Come definisce Admob il context testuale per mostrare annunci mirati?
  • Dimensione AdMob SMART_BANNER
  • AFMA_ReceiveMessage non è definito
  • Le risorse di Google Play non sono state trovate. 'AdsMob'
  • 6 Solutions collect form web for “Come posso mettere un admview adview nella schermata delle impostazioni per uno background in diretta?”

    Ecco una soluzione più semplice: crea 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.

    Classe di preferenze personalizzate:

    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 puoi aggiungere qualcosa di simile alla tua definizione xml preferenze:

     <?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> 

    Sono riuscito a rispondere a questo proposito per me stesso, quindi posso submit la soluzione qui nel caso in cui qualcun altro abbia la stessa domanda.

    Ho aggiunto una TabActivity così come l'attività Preferenze standard, quindi ho nidificato le Preferenze all'interno di una scheda della TabActivity. Questo significa che ho un normale layout xml per la TabActivity che posso mettere un annuncio (o qualsiasi altro tipo di visualizzazione) all'interno e ho ancora trovato lo schermo delle preferenze generate che funzionano all'interno di questo.

    Codice per la 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 per il 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 di android: visibilità = "invisibile" e android: layout_height = "1dp" sul tag TabWidget significa che l'utente non può dire che è in realtà una scheda

    Grazie, lo stavo cercando veramente.

    Solo un avvertimento: se utilizzi questo approccio per il codice di produzione e stai usando proguard devi dire proguard di non codificare la class AdmobPreference, altrimenti l'inflazionatore sarà FC.

    Aggiungi questa row al tuo proguard.cfg:

     -keep public class * extends android.preference.Preference 

    Per coloro che si chiedono come implementare questo con un PreferenceFragment , ecco una soluzione, non c'è bisogno di creare una Preference personalizzata:

    Innanzitutto creare un nuovo layout (qui denominato settings.xml nella cartella risorse di layout) che saranno gonfiate nel 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 dimenticare 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(); } 

    È ansible implementare una schermata delle impostazioni in due modi:

    1. Utilizzare il framework delle preferenze in modo che il file delle preferenze XML auto-crea il layout delle preferenze e tutte le sue funzionalità
    2. Scrivere l'attività da soli, cioè nel caricamento mostrare le preferenze correnti, in quanto vengono mostrate, salvarle, usando un normale file XML di layout che si crea

    Ho il sospetto che stai aggiungendo l'object AdMob a un file XML che non riesca a gestirlo e può gestire gli elementi di preferenza. Inserisci il tuo file XML e specifica quale errore di casting stai vedendo.

    Se si desidera un controllo completo sul contenuto dello schermo delle preferenze, implementarlo come un'attività normale e quindi puoi fare tutto ciò che vuoi.

      @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); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.