Banner ads are rectangular image or text ads that occupy a spot within an app's layout. They stay on screen while users are interacting with the app, and can refresh automatically after a certain period of time. If you're new to mobile advertising, they're a great place to start.
This guide shows you how to integrate banner ads from AdMob into an Android app. In addition to code snippets and instructions, it also includes information about sizing banners properly and links to additional resources.
Prerequisites
- Import the Google Mobile Ads SDK, either by itself or as part of Firebase.
Add AdView to the layout
The first step toward displaying a banner is to place
AdView
in the layout for the Activity or Fragment in which you'd like to display
it. The easiest way to do this is to add one to the corresponding XML layout
file. Here's an example that shows
AdView at the bottom of an Activity:
main_activity.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
</RelativeLayout>
Note the following required attributes:
ads:adSize- Set this to the ad size you'd like to use (see the banner size section below for details).ads:adUnitId- Set this to the unique identifier given to the ad unit in your app where ads are to be displayed. If you show banner ads in different activities, each would require an ad unit.
You can alternatively create AdView programmatically:
AdView adView = new AdView(this);
adView.setAdSize(AdSize.BANNER);
adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
// TODO: Add adView to your view hierarchy.
Always test with test ads
The sample code above contains an ad unit ID and you're free to request ads with it. It's been specially configured to return test ads rather than production ads for every request, which makes it safe to use.
However, once you register an app in the AdMob UI and create your own ad unit IDs for use in your app, you'll need to explicitly configure your device as a test device when you're developing. This is extremely important.
Testing with real ads (even if you never tap on them) is against AdMob policy and can cause your account to be suspended. See Test Ads for information on how you can make sure you always get test ads when developing.
Load an ad
Once the AdView is in place, the next step is to
load an ad. That's done with the
loadAd()
method in the AdView class. It takes an
AdRequest
parameter, which holds runtime information (such as targeting info) about a
single ad request.
Here's an example that shows how to load an ad in the onCreate() method of an
Activity:
MainActivity.java (excerpt)
package ...
import ...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
public class MainActivity extends AppCompatActivity {
private AdView mAdView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MobileAds.initialize(getApplicationContext(),
"ca-app-pub-3940256099942544~3347511713");
mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
...
}
That's it! Your app is now ready to display banner ads.
Ad events
To further customize the behavior of your ad, you can hook onto a number of
events in the ad's lifecycle: loading, opening, closing, and so on. You can
listen for these events through the
AdListener
class.
To use an
AdListener
with
AdView,
simply call the
setAdListener()
method:
mAdView.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
// Code to be executed when an ad finishes loading.
Log.i("Ads", "onAdLoaded");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Code to be executed when an ad request fails.
Log.i("Ads", "onAdFailedToLoad");
}
@Override
public void onAdOpened() {
// Code to be executed when an ad opens an overlay that
// covers the screen.
Log.i("Ads", "onAdOpened");
}
@Override
public void onAdLeftApplication() {
// Code to be executed when the user has left the app.
Log.i("Ads", "onAdLeftApplication");
}
@Override
public void onAdClosed() {
// Code to be executed when when the user is about to return
// to the app after tapping on an ad.
Log.i("Ads", "onAdClosed");
}
});
Each of the overridable methods in
AdListener
corresponds to an event in the lifecycle of an ad.
| Overridable methods | |
|---|---|
onAdLoaded()
|
The onAdLoaded()
method is executed when an ad has finished loading. If you want to delay adding
the AdView
to your activity or fragment until you're sure an ad will be loaded, for
example, you can do so here. If you're using a third-party analytics package to
track impressions, this is also where you can place the call to record them.
|
onAdFailedToLoad()
|
The onAdFailedToLoad()
method is the only one that includes a parameter. The errorCode
parameter indicates what type of failure occurred. The possible values are
defined as constants in the
AdRequest
class:
|
onAdOpened()
|
This method is invoked when the user taps on an ad. If you're using an analytics package to track clickthroughs, this is a good place to record one. |
onAdLeftApplication()
|
This method is invoked after
onAdOpened(),
when a user click opens another app (such as the Google Play), backgrounding
the current app.
|
onAdClosed()
|
When a user returns to the app after viewing an ad's destination URL, this
method is invoked. Your app can use it to resume suspended activities or
perform any other work necessary to make itself ready for interaction.
See the
AdMob
AdListener example for an implementation of the ad listener
methods in the Android API Demo app.
|
Banner sizes
The following banner sizes are supported:
| Size (WxH) | Description | Availability | AdSize constant |
|---|---|---|---|
| 320x50 | Standard Banner | Phones and Tablets | BANNER |
| 320x100 | Large Banner | Phones and Tablets | LARGE_BANNER |
| 300x250 | IAB Medium Rectangle | Phones and Tablets | MEDIUM_RECTANGLE |
| 468x60 | IAB Full-Size Banner | Tablets | FULL_BANNER |
| 728x90 | IAB Leaderboard | Tablets | LEADERBOARD |
| Screen width x 32|50|90 | Smart Banner | Phones and Tablets | SMART_BANNER |
Smart Banners
Smart Banners are ad units that render screen-width banner ads on any screen size across different devices in either orientation. Smart Banners help deal with increasing screen fragmentation across different devices by "smartly" detecting the width of the device in its current orientation and making the ad view that size.
Three ad heights are implemented in smart banners:
| Ad height | Screen height |
|---|---|
| 32dp | ≤ 400dp |
| 50dp | > 400dp and ≤ 720dp |
| 90dp | > 720dp |
Typically, Smart Banners on phones have a height of 50dp in portrait and 32dp in landscape. On tablets, height is normally 90dp in both orientations.
When an image ad isn't large enough to take up the entire allotted space, the image will be centered, and the space on either side will be filled in.

To use Smart Banners in XML, specify the constant SMART_BANNER for the ad
size and set the width of the AdView to match_parent. For example:
<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" ads:adSize="SMART_BANNER" ads:adUnitId="ca-app-pub-3940256099942544/6300978111"> <com.google.android.gms.ads.AdView>
To create a Smart Banner programmatically, use AdSize.SMART_BANNER as the ad
size:
AdView adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);
Additional resources
Samples
- Banner example - minimal implementation of banner ads
- API Demo - features advanced banner topics
Mobile Ads Garage video tutorials
Next steps
- If you haven't already, create your own app and banner ad unit in the AdMob UI and use your newly created app ID and ad unit ID in your code. Remember to configure your device with test ads.
- Learn about ad targeting and banner ad guidance.
- Try another ad format: