# Multi-Size Auto Load Banner

Multi-size autoload banner placements are similar to [autoload banners](https://aatkit.gitbook.io/android-integration/formats/banner/auto-load-banner), but can present banners of varying sizes. For instance, it is possible to display a banner of the standard size 320x53, followed by a medium rectangle of size 300x250 within the same placement.

It will depend on the server-side configuration on the Dashboard and what actual sizes are getting delivered to your placement.

### Create Placement <a href="#create-placement" id="create-placement"></a>

To create an instance of [AutoLoadMultiSizeBannerPlacement](https://android-sdk.aatkit.com/references/-a-a-t-kit/com.intentsoftware.addapptr/-auto-load-multi-size-banner-placement/index.html), use the following API:

{% tabs %}
{% tab title="Java" %}

```java
AutoLoadMultiSizeBannerPlacement placement = AATKit.createAutoLoadMultiSizeBannerPlacement("<PLACEMENT_NAME");
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
val placement = AATKit.createAutoLoadMultiSizeBannerPlacement("<PLACEMENT_NAME")
```

{% endtab %}
{% endtabs %}

<figure><img src="https://972604881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FR7IV2ZyhKx0x7rB9AUYs%2Fuploads%2FjBKhAX6025ZEqDQRkyw2%2FMulti1-and.png?alt=media&#x26;token=160c9338-9d3b-4515-bd84-f10e6dc35d9e" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
The green background is an ad container (FrameLayout), into which the placement view is added by the app. It represents the space that the app reserves for a multi-size banner placement view (the green colour is just used here for explanatory purposes).
{% endhint %}

### Listen to Callbacks <a href="#listen-to-callbacks-optional" id="listen-to-callbacks-optional"></a>

Through the use of [AutoLoadMultiSizeBannerPlacementListener](https://android-sdk.aatkit.com/references/-a-a-t-kit/com.intentsoftware.addapptr/-auto-load-multi-size-banner-placement-listener/index.html), you can listen to the different placement callbacks.

{% tabs %}
{% tab title="Java" %}

```java
placement.setListener(this);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.listener = this
```

{% endtab %}
{% endtabs %}

### **Multi-Size Auto Load Banner Placement Listener**

You will receive different placement callbacks by implementing the `AutoLoadMultiSizeBannerPlacementListener`.

{% tabs %}
{% tab title="Java" %}

```java
@Override
public void onHaveAdWithBannerView(@NonNull Placement placement, @NonNull BannerPlacementLayout bannerView) {
    // The placement has loaded a new ad
    // [IMPORTANT] remove the previously displayed banner view
    // Add the received bannerView on the screen
}

@Override
public void onPauseForAd(@NonNull Placement placement) {
    // Ad went fullscreen and that application should pause.
}

@Override
public void onResumeAfterAd(@NonNull Placement placement) {
    // Ad came back from fullscreen and that application should resume.
}

@Override
public void onNoAd(@NonNull Placement placement) {
    // The placement could not load a new ad
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
override fun onHaveAdWithBannerView(placement: Placement, bannerView: BannerPlacementLayout) {
    // The placement has loaded a new ad
    // [IMPORTANT] remove the previously displayed banner view
    // Add the received bannerView on the screen
}

override fun onPauseForAd(placement: Placement) {
    // Ad went fullscreen and that application should pause.
}

override fun onResumeAfterAd(placement: Placement) {
    // Ad came back from fullscreen and that application should resume.
}

override fun onNoAd(placement: Placement) {
    // The placement could not load a new ad
}
```

{% endtab %}
{% endtabs %}

### Request Ad

#### Automatic Reload <a href="#automatic-reload" id="automatic-reload"></a>

To automatically load (and reload) the multi-size auto-load banner placement enable auto-reload. If you do not set the refresh time interval seconds explicitly, AATKit will

* Reload every 30 seconds (if no refresh time interval is set on the Dashboard)
* Respect the refresh time interval setting of the Dashboard (which means, you can configure the interval without having to re-publish your app)

{% tabs %}
{% tab title="Java" %}

```java
// reload the banner placement every 30 seconds.
placement.startAutoReload();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// reload the banner placement every 30 seconds.
placement.startAutoReload()
```

{% endtab %}
{% endtabs %}

The minimum refresh time is 30 seconds.

This needs to stop the auto-reload when it is no longer needed (e.g. if the view controller presenting ads will disappear):

{% tabs %}
{% tab title="Java" %}

```java
placement.stopAutoReload();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.stopAutoReload()
```

{% endtab %}
{% endtabs %}

**One Placement for Multiple Screens**

If the same placement is used on various different pages of the app and you want to load a new ad every time the user navigates to another page, you can achieve that by calling `stopAutoReload()` in the first controller and then call `startAutoReload()` in the next controller. This will immediately load and present a banner ad.

{% tabs %}
{% tab title="Java" %}

```swift
placement.stopAutoReload();
// move to next screen
placement.startAutoReload();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.stopAutoReload();
// move to next screen
placement.startAutoReload();
```

{% endtab %}
{% endtabs %}

### Complete Code Example <a href="#complete-code-example" id="complete-code-example"></a>

{% tabs %}
{% tab title="Java" %}

```java
private AutoLoadMultiSizeBannerPlacement placement = AATKit.createAutoLoadMultiSizeBannerPlacement("<PLACEMENT_NAME");
private BannerPlacementLayout loadedBanner = null;

@Override
protected void onResume() {
    super.onResume();
    // [IMPORTANT] Notify AATKit about activity lifecycle
    AATKit.onActivityResume(this);

    // Set placement listener to listen to the callbacks
    placement.setListener(this);

    // reload the banner placement every 30 seconds.
    placement.startAutoReload();
}

@Override
protected void onPause() {
    // [IMPORTANT] Stop placement auto-reload
    placement.stopAutoReload();
    // [IMPORTANT] Notify AATKit about activity lifecycle
    AATKit.onActivityPause(this);
    super.onPause();
}

// AutoLoadMultiSizeBannerPlacementListener implementation
@Override
public void onPauseForAd(@NonNull Placement placement) {
    // App is paused after banner got clicked
}

@Override
public void onResumeAfterAd(@NonNull Placement placement) {
    // Back to the app after clicking on the ad
}

@Override
public void onHaveAdWithBannerView(@NonNull Placement placement, @NonNull BannerPlacementLayout bannerView) {
    //clear previous banner
    bannerFrame.removeAllViews();
    if (loadedBanner != null) {
        loadedBanner.destroy();
    }
    //present new banner
    loadedBanner = bannerView;
    bannerFrame.addView(loadedBanner);
}

@Override
public void onNoAd(@NonNull Placement placement) {
    // The placement could not load a new ad
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
private val placement = AATKit.createAutoLoadMultiSizeBannerPlacement("<PLACEMENT_NAME")
private var loadedBanner: BannerPlacementLayout? = null

protected override fun onResume() {
    super.onResume()
    // [IMPORTANT] Notify AATKit about activity lifecycle
    onActivityResume(this)

    // Set placement listener to listen to the callbacks
    placement.listener = this

    // reload the banner placement every 30 seconds.
    placement.startAutoReload()
}

protected override fun onPause() {
    // [IMPORTANT] Stop placement auto-reload
    placement.stopAutoReload()
    // [IMPORTANT] Notify AATKit about activity lifecycle
    onActivityPause(this)
    super.onPause()
}

// AutoLoadMultiSizeBannerPlacementListener implementation
fun onPauseForAd(placement: Placement) {
    // App is paused after banner got clicked
}

fun onResumeAfterAd(placement: Placement) {
    // Back to the app after clicking on the ad
}

fun onHaveAdWithBannerView(placement: Placement, bannerView: BannerPlacementLayout) {
    //clear previous banner
    bannerFrame.removeAllViews()
    loadedBanner?.destroy()
    //present new banner
    loadedBanner = bannerView
    bannerFrame.addView(loadedBanner)
}

fun onNoAd(placement: Placement) {
    // The placement could not load a new ad
}
```

{% endtab %}
{% endtabs %}
