开发者

Android Admob advert in PreferenceActivity

Is there a way to add an admob advert 开发者_运维知识库to a PreferenceActivity? How to?


What you can also do is to create a custom Preference that can be easily added to any preferences screen.

Add a layout file called ad_layout.xml to your res/layout folder that will be filled later by AdMob.

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

Create a class called AdPreference like that:

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;    
    }
}

Now in the preference xml file you can just add add any position you like (at the top or in between any other preferences ).

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


Yes, a PreferenceActivity is just a sub-class of ListActivity and, as with ListActivity, you can specify your own custom layout so long as it contains a ListView with an ID of android.R.id.list. So create whatever XML layout file you need containing a ListView and an AdView and use that layout for the PreferenceActivity.


Dan Dyer's answer is correct. I would like to elaborate a bit, just to clarify by example.You can use a layout like this (called config.xml under 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>

In your Activity that extends PreferenceActivity you write something like this in the onCreate method;

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


There is some changes to P.Melch answer in Adpreference class is like below (because its not working with latest google play ads library):

    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;
    }
}


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


You just need to make a separate layout for ad and Add it to preference_screen.xml as PreferenceCategory. You can see the clear picture in the attached images layout

preferenceScreen


I implemented the proposed approach, but faced problem regarding placing the banner at the top and with padding issues. So, i used a different approach and interested to share with you. I was working on a preference activity, although it has been deprecated but i had to work on it for some reason instead of changing to androidx preference library.

Here are the following steps:

  1. Get the parent of preference activity.

    LinearLayout root = (LinearLayout) 
    findViewById(android.R.id.list).getParent().getParent().getParent();
    
  2. Create a xml file named banner_ad.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <com.google.android.gms.ads.AdView
         android:id="@+id/adview"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         ads:adSize="SMART_BANNER"
         ads:adUnitId="@string/banner_id" />
    </LinearLayout>
    
  3. Inflate the layout.

    LinearLayout adViewLayout = (LinearLayout) 
    LayoutInflater.from(this).inflate(R.layout.banner_ad,root,false);
    AdView adView = adViewLayout.findViewById(R.id.adview);
    
  4. Load add.

    AdRequest adRequest = new AdRequest.Builder()
            .addTestDevice(device_id)
            .build();
    adView.loadAd(adRequest);
    
  5. Add layout view as a child of root view. In my case i used this below toolbar at index 1.

    root.addView(adViewLayout,1);
    
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜