How do I make SMART_BANNER ads from admob fill correctly in Android?
Solution 1
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.
Solution 2
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" >
Solution 3
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>
BigTobster
Updated on July 12, 2022Comments
-
BigTobster almost 2 years
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>