I have a smart banner at the bottom of my portrait app.

My layout looks like this:

<RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="0dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:paddingTop="0dp">

        <TextSwitcher
            ...
            Some TextSwitcher Stuff Here
            ... />

        <com.google.ads.AdView
            xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
            android:id="@+id/bannerAd"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:gravity="bottom"
            android:visibility="visible"
            googleads:adSize="SMART_BANNER"
            googleads:adUnitId="@string/admobId" />

    </RelativeLayout>

My Manifest has appropriate permissions and this:

<activity
            android:name="com.google.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" >
</activity>

And my ads are initialised by this code:

private void initialiseAds()
    {
        AdView adView = (AdView) findViewById(R.id.bannerAd);
        adView.setAdListener(new MyAdListener(adView));
        AdRequest adRequest = new AdRequest();
        adRequest.addKeyword("games");
        adRequest.addKeyword("tabletop games");
        adRequest.addKeyword("board games");
        adRequest.addKeyword("monopoly");
        adRequest.addKeyword("gambling");
        adRequest.addKeyword("dice");
        final TelephonyManager tm =(TelephonyManager)getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);
        String deviceId = tm.getDeviceId();
        adRequest.addTestDevice(deviceId);
        adView.loadAd(adRequest);
    }

When I run the app, my ads do not display. LogCat gives me this:

08-01 11:24:59.015: E/Ads(10436): Not enough space to show ad! Wants: <720, 100>, Has: <656, 935>
08-01 11:24:59.020: E/Ads(10436): Not enough space to show ad! Wants: <720, 100>, Has: <656, 935>

The device is a Galaxy S3. It seems to be getting the size requirements wrong ((720, 100) is surely too big for a phone banner app?).

The SMART_BANNER is declared in XML so I cannot believe the AdView needs to be regenerated incode since it must already know the sizes on the first instantiation?

Any ideas?

EDIT:

If I put SMART_BANNER inside only the most exterior Layout, this is the XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/btnRollDice"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:contentDescription="@string/buttonDescription"
        android:onClick="rollDice"
        android:text="@string/btnRoll"
        android:textSize="40sp" />

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingBottom="0dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:paddingTop="0dp">

        <TextSwitcher
            android:id="@+id/diceValue"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center"
            android:animateFirstView="false"
            android:contentDescription="@string/textSwitcherDescription"
            android:inAnimation="@anim/slide_down"
            android:outAnimation="@anim/abc_fade_out"
            android:textAlignment="center"
            android:visibility="visible" />

    </RelativeLayout>
    <com.google.ads.AdView
            android:id="@+id/bannerAd"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_margin="0dp"
            ads:adSize="SMART_BANNER"
            ads:adUnitId="@string/admobId"
            android:gravity="bottom"
            android:padding="0dp"
            android:visibility="visible" />
</LinearLayout>

And this is the Error Message:

08-01 12:59:38.120: E/Ads(22919): Not enough space to show ad! Wants: <720, 100>, Has: <720, 0>

I suspect that this is because the RelativeLayout and Button have filled the LinearLayout and left no room for the AdView. Is there a way to assign a wrap_contents's worth of height to adview without impacting the RelativeLayout?

Edit: Solution:

This gets it about 95% of the way there (good enough :) ). The TextSwitcher is about 1% off dead center and it has a slightly capped height but you wouldn't really notice unless you stared and compared for hours. Hopefully this will help someone. Thanks to Harshid and William for the contributions.

<!-- This is the XML for the Portrait View of the App
It has 2 major tiers
The first tier contains 3 items:
    The Ad Banner
    The button
    The 2nd Tier
The second tier contains 1 item
    The TextSwitcher

XML is pretty readable so just read it! :)

 -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"
    android:paddingRight="0dp"
    android:paddingTop="0dp"
    tools:context=".MainActivity"
    android:id="@+id/masterContainer">


    <com.google.ads.AdView
        android:id="@+id/bannerAd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_margin="0dp"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/admobId"
        android:padding="0dp"
        android:visibility="visible" />

    <Button
        android:id="@+id/btnRollDice"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:layout_marginLeft="@dimen/activity_horizontal_margin"
        android:layout_marginRight="@dimen/activity_horizontal_margin"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_marginBottom="0dp"
        android:paddingBottom="0dp"
        android:contentDescription="@string/buttonDescription"
        android:onClick="rollDice"
        android:text="@string/btnRoll"
        android:textSize="40sp" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/bannerAd"
        android:layout_below="@id/btnRollDice"
        android:layout_margin="0dp"
        android:orientation="vertical"
        android:paddingBottom="0dp"
        android:paddingLeft="0dp"
        android:paddingRight="0dp"
        android:paddingTop="0dp" >

            <TextSwitcher
                android:id="@+id/diceValue"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="false"
                android:layout_alignParentLeft="false"
                android:layout_alignParentRight="false"
                android:layout_alignParentTop="false"
                android:layout_centerHorizontal="false"
                android:layout_centerInParent="true"
                android:layout_centerVertical="false"
                android:layout_gravity="center"
                android:animateFirstView="false"
                android:contentDescription="@string/textSwitcherDescription"
                android:inAnimation="@anim/slide_down"
                android:outAnimation="@anim/abc_fade_out"
                android:textAlignment="center"
                android:visibility="visible" />

        </RelativeLayout>

</RelativeLayout>
有帮助吗?

解决方案 2

I Think your Admob banner is in Layout.

Put banner out side of all Layout and inner on Main Layout.Because you have used padding,Margin and Blah blah..

<Your Main Layout>
     <Secondary Layout>
        < Layout />
     </Secondary Layout>
//put your banner here
</Your Main Layout>

try this way.

其他提示

Ensure that your outer layout does not have any padding

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="0dp"
    android:paddingLeft="0dp"   // Change to 0dp
    android:paddingRight="0dp"  // Change to 0dp
    android:paddingTop="2dp"    >

If you want to use your second layout then you should give the relative layout a layout_weight of 1 (layout_weight only,applies to LinearLayouts). This will tell it to expand to fill any unused space in the containing LinearLayout.

Suggest you read http://developer.android.com/guide/topics/ui/declaring-layout.html to get a better understanding of Android layouts, you are using attributes from RelativeLayout and LinearLayout indiscriminately. Some of the layout attributes are only applicable to one type of layout.

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    ...>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        .../>

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        ...>

        <TextSwitcher
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            .../>
    </RelativeLayout>

    <com.google.ads.AdView
            android:id="@+id/bannerAd"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            ads:adSize="SMART_BANNER"
            ads:adUnitId="@string/admobId"
     />
</LinearLayout>

Check your device dp and load using the various ad constants(banner, leaderboard etc) with respective key given in admob mediation.

From your XML Code, Remove the Four Padding Attributes i.e., PaddingBottom, PaddingLeft, PaddingRight, PaddingTop

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top