简体   繁体   中英

My Admob ad is not drawing but is there? (LibGDX Admob 6.4.1)

I am using LibGDX 0.9.9 and Admob 6.4.1. I set up banner ads to appear in the top right corner of my app. However when I load up my app I can't see the banner. Although when I press where the banner should be it acts like normal and starts to appear. This happens both in testing mode and real mode. Here is my code:

    public class MainActivity extends AndroidApplication {
    private AdView adView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = false;
        cfg.useAccelerometer = false;
        cfg.useCompass = false;

        RelativeLayout layout = new RelativeLayout(this);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

        // Create the libgdx View
        View gameView = initializeForView(new Game(), false);

        // Create and setup the AdMob view
        adView = new AdView(this);
        adView.setAdUnitId("SECRET ID");
        adView.setAdSize(AdSize.BANNER);

        AdRequest adRequest = new AdRequest.Builder()
        .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)       // Emulator
        .addTestDevice("MY DEVICE ID") // My  Nexus test
        .build();

        adView.loadAd(adRequest);

        layout.addView(gameView);

        // Add the AdMob view
        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

        layout.addView(adView, adParams);

        setContentView(layout);
    }

    public void onDestroy() { 
        if (adView != null) { 
            adView.destroy();
        }

        super.onDestroy();
    }

and the Android Manifest:

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.keep.hopping"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <application
        android:icon="@drawable/jumper"
        android:label="Keep Hopping" >
        <meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version"/>
        <activity
            android:name="com.keep.hopping.MainActivity"
            android:label="Keep Hopping"
            android:screenOrientation="landscape"
            android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         <activity android:name="com.google.android.gms.ads.AdActivity"
             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    </application>

</manifest>

Anyone have any ideas as to why this weird behaviour is happening?

In my case the problem was solved simply by setting the background of the adview:

...
layout.addView(adView, adParams);
adView.setBackgroundColor(getResources().getColor(android.R.color.transparent));
...

you can use any other color.

here it is the fix for integration of AdMob6.4.1 with libgdx, I put some lines of code:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainLayout"
    android:paddingTop="1dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

</RelativeLayout>

this is the main.xml

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

        setContentView(R.layout.main);
        MainActivity.mContext = getApplicationContext();

        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
        cfg.useGL20 = false;
        cfg.useAccelerometer = false;
        cfg.useCompass = false;

        RelativeLayout layout = (RelativeLayout)findViewById(R.id.mainLayout);


        mBlockPuzzleInstance = new BlockPuzzle(this);
        initialize(mBlockPuzzleInstance, false);
        View gameView = initializeForView(mBlockPuzzleInstance, true);

        adView = new AdView(this);
        adView.setAdUnitId("a152ffba4abde11");
        adView.setAdSize(AdSize.SMART_BANNER);

        AdRequest adRequest = new AdRequest.Builder().build();
        adView.loadAd(adRequest);

        layout.addView(gameView);

        // Add the AdMob view
        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

        layout.addView(adView, adParams);

        setContentView(layout);
 }

the banner should load now.

Happy Coding!

Lunatikul's answer worked for me, but the important part for me was the padding:

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

I actually implemented it programmatically like this:

layout.setPadding(0, 1, 0, 0);

Hope this helps!

Your problem could be that your 1st ad is hidden. If you waited 60 seconds and then your Adview appeared, you can fix it by only adding the AdView to the layout once your first ad loads by using an AdListener:

        // Create and setup the AdMob view
        AdRequest.Builder ad_builder = new AdRequest.Builder();
        ad_builder.addTestDevice("XXXXXXXXXXXXX"); // my HTC phone
        m_AdRequest = ad_builder.build();

        m_AdView = new AdView(this);
        m_AdView.setAdSize(AdSize.SMART_BANNER);
        m_AdView.setAdUnitId("ZZZZZZZZZZZZ");
        m_AdView.setVisibility(View.GONE);
        m_AdView.setAdListener(new AdListener() {
            private boolean _first = true;

            @Override
            public void onAdLoaded() {
                if (_first) {
                    _first = false;

                    // Add the AdMob view when the first ad gets loaded, this makes sure the first ad gets displayed
                    RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
                    adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); // places the ad at the bottom overlapping your game

                    layout.addView(m_AdView, adParams);
                }
            }
        });

Hope this solves your headache!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM