---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://ads.yandex.com/helpcenter/en/easy/integration/android/formats/banner.md
  - https://ads.yandex.com/helpcenter/ru/easy/integration/android/formats/banner.md
  - https://ads.yandex.com/helpcenter/zh/easy/integration/android/formats/banner.md
  - href: zh/easy/integration/android/formats/banner.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
---
> **Documentation Index:** Fetch the complete configuration index at https://ads.yandex.com/helpcenter/zh/llms.txt

# 横幅广告

## 横幅广告类型

Yandex Mobile Ads SDK 提供三种类型的横幅广告：

#|
||

**横幅广告**

|

**描述**

|

**使用场景**

||
||

粘性横幅广告

|

固定在屏幕边缘并显示在其他元素之上的横幅广告。此类横幅广告不受屏幕滚动影响。

|

如果您希望横幅广告保持“固定效果”，即保持位置不变，即使用户滚动浏览屏幕也始终显示在内容上方。

||
||

内嵌横幅广告

|

嵌入应用中（例如，嵌入内容或列表中）的横幅广告，如同用户界面元素一样呈现。

|

横幅广告应成为页面内容的一部分，例如出现在动态消息中、帖子之间或作为列表项显示。

||
||

固定横幅广告

|

固定在特定位置或适用于固定高度空间的横幅广告。

|

当您需要在静态位置投放横幅广告时，例如在工具栏下方或屏幕底部。

||
|#

所有类型的横幅广告都会每隔 60 秒自动更新一次广告创意。

从代码角度来看，这些横幅广告仅在尺寸设置方式上有所不同。例如：

{% list tabs %}

- 粘性横幅广告

  ```kotlin
  BannerAdSize.stickySize(context: Context, widthDp: Int)
  ```

- 内嵌横幅广告

  ```kotlin
  BannerAdSize.inlineSize(widthDp: Int, heightDp: Int)
  ```

- 固定横幅广告

  ```kotlin
  BannerAdSize.fixedSize(widthDp: Int)
  ```

{% endlist %}


<!-- source: zh/easy/_includes/notes-android-easy-guide.md -->
{% note info %}

[演示项目](https://ads.yandex.com/helpcenter/zh/easy/integration/android/testing.md#demo) 中提供了展示所有格式类型运作原理的示例。

{% endnote %}
<!-- endsource: zh/easy/_includes/notes-android-easy-guide.md -->

实体描述：

#|
||

**实体**

|

**描述**

||
||

`BannerAdSize`

|

横幅广告高度：

- **不得**超过屏幕高度的 15%。

- 必须至少为 50 dp。

所有横幅广告尺寸必须以 **dp** 为单位指定。

||
||

`adUnitId`

|

使用：

- **Development mode**，用于配合[演示广告单元](https://ads.yandex.com/helpcenter/zh/easy/integration/android/testing.md#blocks) 使用。

- **Production mode**，用于配合 `R-M-XXXXXX-Y` 使用（实际 ID 请在 Yandex Advertising Network 界面查询）。`R-M-XXXXXX-Y` 是您实际广告单元 ID 的模板，将用于接收各种广告创意。

||
|#


## 使用 XML 文件创建横幅广告的示例

{% list tabs %}

- Kotlin

  ```kotlin
  class InlineBannerAdActivity : AppCompatActivity(), BannerAdEventListener {

      private var bannerAd: BannerAdView? = null
      private var bannerAdSize: BannerAdSize? = null
      private var currentAdUnitId: String? = null
      private lateinit var binding: ActivityInlineBannerAdBinding

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)
          binding = ActivityInlineBannerAdBinding.inflate(layoutInflater)
          setContentView(binding.root)

          binding.btnLoadBanner.setOnClickListener {
              configureBannerAdSize()
              loadBannerAd()
          }
          binding.btnDestroyBanner.setOnClickListener {
              destroyBanner()
          }

          bannerAd = binding.banner
          configureBannerAdSize()
      }

      private fun configureBannerAdSize() {
          bannerAdSize = BannerAdSize.inlineSize(this@InlineBannerAdActivity, 350, 60)
      }

      fun loadBannerAd() {
          bannerAdSize?.let { bannerAdSize ->
              val selectedAdUnitId = "demo-banner-yandex" // 使用 R-M-XXXXXX-Y 或演示广告单元（请参阅下方说明）
              if (currentAdUnitId != selectedAdUnitId) {
                  destroyBanner()
                  createBanner(selectedAdUnitId, bannerAdSize)
              }
              val adRequest = AdRequest.Builder().build()
              bannerAd?.loadAd(adRequest)
          }
      }

      private fun createBanner(adUnitId: String, bannerAdSize: BannerAdSize) {
          bannerAd = BannerAdView(this).apply {
              setAdUnitId(adUnitId)
              setAdSize(bannerAdSize)
              setBannerAdEventListener(this@InlineBannerAdActivity)
          }
          val params = createLayoutParams(bannerAdSize)
          binding.root.addView(bannerAd, params)
      }

      private fun createLayoutParams(size: BannerAdSize): ConstraintLayout.LayoutParams {
          return ConstraintLayout.LayoutParams(
              ConstraintLayout.LayoutParams.MATCH_PARENT,
              ConstraintLayout.LayoutParams.WRAP_CONTENT,
          ).apply {
              bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID
          }
      }

      private fun destroyBanner() {
          bannerAd?.let {
              it.destroy()
              binding.root.removeView(it)
          }
          bannerAd = null
      }

      override fun onDestroy() {
          destroyBanner()
          super.onDestroy()
      }

      override fun onAdClicked() {}
      override fun onAdFailedToLoad(error: AdRequestError) {}
      override fun onAdLoaded() {}
      override fun onImpression(impressionData: ImpressionData?) {}
      override fun onLeftApplication() {}
      override fun onReturnedToApplication() {}
  }
  ```

- Java

  ```java
  public class InlineBannerAdActivity extends AppCompatActivity implements BannerAdEventListener {

      private BannerAdView bannerAd = null;
      private BannerAdSize bannerAdSize = null;
      private String currentAdUnitId = null;
      private ActivityInlineBannerAdBinding binding;

      @Override
      protected void onCreate(@Nullable Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          binding = ActivityInlineBannerAdBinding.inflate(getLayoutInflater());
          setContentView(binding.getRoot());

          binding.btnLoadBanner.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  configureBannerAdSize();
                  loadBannerAd();
              }
          });

          binding.btnDestroyBanner.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  destroyBanner();
              }
          });

          bannerAd = binding.banner;
          configureBannerAdSize();
      }

      private void configureBannerAdSize() {
          bannerAdSize = BannerAdSize.inlineSize(this, 350, 60);
      }

      private void loadBannerAd() {
          if (bannerAdSize != null) {
              String selectedAdUnitId = "demo-banner-yandex"; // 使用 R-M-XXXXXX-Y 或演示广告单元
              if (currentAdUnitId == null || !currentAdUnitId.equals(selectedAdUnitId)) {
                  destroyBanner();
                  createBanner(selectedAdUnitId, bannerAdSize);
                  currentAdUnitId = selectedAdUnitId;
              }
              AdRequest adRequest = new AdRequest.Builder().build();
              if (bannerAd != null) {
                  bannerAd.loadAd(adRequest);
              }
          }
      }

      private void createBanner(String adUnitId, BannerAdSize bannerAdSize) {
          bannerAd = new BannerAdView(this);
          bannerAd.setAdUnitId(adUnitId);
          bannerAd.setAdSize(bannerAdSize);
          bannerAd.setBannerAdEventListener(this);

          ConstraintLayout.LayoutParams params = createLayoutParams(bannerAdSize);
          binding.getRoot().addView(bannerAd, params);
      }

      private ConstraintLayout.LayoutParams createLayoutParams(BannerAdSize size) {
          ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(
                  ConstraintLayout.LayoutParams.MATCH_PARENT,
                  ConstraintLayout.LayoutParams.WRAP_CONTENT
          );
          params.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID;
          return params;
      }

      private void destroyBanner() {
          if (bannerAd != null) {
              bannerAd.destroy();
              binding.getRoot().removeView(bannerAd);
              bannerAd = null;
          }
      }

      @Override
      protected void onDestroy() {
          destroyBanner();
          super.onDestroy();
      }
      @Override
      public void onAdClicked() {}
      @Override
      public void onAdFailedToLoad(@Nullable AdRequestError error) {}
      @Override
      public void onAdLoaded() {}
      @Override
      public void onImpression(@Nullable ImpressionData impressionData) {}
      @Override
      public void onLeftApplication() {}
      @Override
      public void onReturnedToApplication() {}
  }
  ```

- activity_inline_banner_ad.xml

  ```xml
  <androidx.constraintlayout.widget.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/coordinatorLayout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context=".adunits.InlineBannerAdActivity">

      <Button
          android:id="@+id/btnLoadBanner"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Load Banner"
          app:layout_constraintLeft_toLeftOf="parent"
          app:layout_constraintRight_toRightOf="parent"
          app:layout_constraintTop_toTopOf="parent"
          app:layout_constraintBottom_toBottomOf="parent" />

      <Button
          android:id="@+id/btnDestroyBanner"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="Destroy Banner"
          app:layout_constraintTop_toBottomOf="@id/btnLoadBanner"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          android:layout_marginTop="16dp" />

      <com.yandex.mobile.ads.banner.BannerAdView
          android:id="@+id/banner"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          app:layout_constraintBottom_toBottomOf="parent" />

  </androidx.constraintlayout.widget.ConstraintLayout>
  ```

{% endlist %}


## 使用以编程方式生成的活动创建横幅广告的示例

{% list tabs %}

- Kotlin

  ```kotlin
  class InlineBannerAdActivity : AppCompatActivity(), BannerAdEventListener {

      private lateinit var bannerAd: BannerAdView

      override fun onCreate(savedInstanceState: Bundle?) {
          super.onCreate(savedInstanceState)

          val rootLayout = ConstraintLayout(this).apply {
              layoutParams = LayoutParams(MATCH_PARENT, MATCH_PARENT)
          }

          val loadButton = Button(this).apply {
              text = "Load Banner here"
              id = View.generateViewId()
          }

          val destroyButton = Button(this).apply {
              text = "Destroy Banner"
              id = View.generateViewId()
          }

          rootLayout.addView(loadButton, LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
              topToTop = LayoutParams.PARENT_ID
              bottomToBottom = LayoutParams.PARENT_ID
              startToStart = LayoutParams.PARENT_ID
              endToEnd = LayoutParams.PARENT_ID
          })

          rootLayout.addView(destroyButton, LayoutParams(WRAP_CONTENT, WRAP_CONTENT).apply {
              topToBottom = loadButton.id
              startToStart = LayoutParams.PARENT_ID
              endToEnd = LayoutParams.PARENT_ID
              topMargin = 24
          })

          setContentView(rootLayout)

          val bannerSize = BannerAdSize.inlineSize(this, 320, 50)

          loadButton.setOnClickListener {
              destroyBannerIfNeeded(rootLayout)

              bannerAd = BannerAdView(this).apply {
                  id = View.generateViewId()
                  setAdUnitId("demo-banner-yandex") // 使用 R-M-XXXXXX-Y 或演示广告单元（请参阅下方说明）
                  setAdSize(bannerSize)
                  setBannerAdEventListener(this@InlineBannerAdActivity)
              }

              rootLayout.addView(
                  bannerAd,
                  LayoutParams(MATCH_PARENT, WRAP_CONTENT).apply {
                      bottomToBottom = LayoutParams.PARENT_ID
                      bottomMargin = 32
                  }
              )

              bannerAd.loadAd(AdRequest.Builder().build())
          }

          destroyButton.setOnClickListener {
              destroyBannerIfNeeded(rootLayout)
          }
      }

      private fun destroyBannerIfNeeded(container: ConstraintLayout) {
          if (::bannerAd.isInitialized) {
              bannerAd.destroy()
              container.removeView(bannerAd)
          }
      }

      override fun onDestroy() {
          if (::bannerAd.isInitialized) {
              bannerAd.destroy()
              (bannerAd.parent as? ConstraintLayout)?.removeView(bannerAd)
          }
          super.onDestroy()
      }
      override fun onAdClicked() {}
      override fun onAdFailedToLoad(error: AdRequestError) {}
      override fun onAdLoaded() {}
      override fun onImpression(impressionData: ImpressionData?) {}
      override fun onLeftApplication() {}
      override fun onReturnedToApplication() {}
  }
  ```

- Java

  ```java
  public class InlineBannerAdActivity extends AppCompatActivity implements BannerAdEventListener {

      private BannerAdView bannerAd;

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

          final ConstraintLayout rootLayout = new ConstraintLayout(this);
          rootLayout.setLayoutParams(new LayoutParams(
                  LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

          final Button loadButton = new Button(this);
          loadButton.setText("Load Banner here");
          loadButton.setId(View.generateViewId());

          final Button destroyButton = new Button(this);
          destroyButton.setText("Destroy Banner");
          destroyButton.setId(View.generateViewId());

          LayoutParams loadBtnParams = new LayoutParams(
                  LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
          loadBtnParams.topToTop = LayoutParams.PARENT_ID;
          loadBtnParams.bottomToBottom = LayoutParams.PARENT_ID;
          loadBtnParams.startToStart = LayoutParams.PARENT_ID;
          loadBtnParams.endToEnd = LayoutParams.PARENT_ID;
          rootLayout.addView(loadButton, loadBtnParams);

          LayoutParams destroyBtnParams = new LayoutParams(
                  LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
          destroyBtnParams.topToBottom = loadButton.getId();
          destroyBtnParams.startToStart = LayoutParams.PARENT_ID;
          destroyBtnParams.endToEnd = LayoutParams.PARENT_ID;
          destroyBtnParams.topMargin = 24;
          rootLayout.addView(destroyButton, destroyBtnParams);

          setContentView(rootLayout);

          final BannerAdSize bannerSize = BannerAdSize.inlineSize(this, 320, 50);

          loadButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  destroyBannerIfNeeded(rootLayout);

                  bannerAd = new BannerAdView(InlineBannerAdActivity.this);
                  bannerAd.setId(View.generateViewId());
                  bannerAd.setAdUnitId("demo-banner-yandex"); // 使用 R-M-XXXXXX-Y 或演示广告单元
                  bannerAd.setAdSize(bannerSize);
                  bannerAd.setBannerAdEventListener(InlineBannerAdActivity.this);

                  LayoutParams bannerParams = new LayoutParams(
                          LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                  bannerParams.bottomToBottom = LayoutParams.PARENT_ID;
                  bannerParams.bottomMargin = 32;
                  rootLayout.addView(bannerAd, bannerParams);

                  bannerAd.loadAd(new AdRequest.Builder().build());
              }
          });

          destroyButton.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  destroyBannerIfNeeded(rootLayout);
              }
          });
      }

      private void destroyBannerIfNeeded(ConstraintLayout container) {
          if (bannerAd != null) {
              bannerAd.destroy();
              container.removeView(bannerAd);
              bannerAd = null;
          }
      }

      @Override
      protected void onDestroy() {
          if (bannerAd != null) {
              bannerAd.destroy();
              View parent = (View) bannerAd.getParent();
              if (parent instanceof ConstraintLayout) {
                  ((ConstraintLayout) parent).removeView(bannerAd);
              }
              bannerAd = null;
          }
          super.onDestroy();
      }
      @Override
      public void onAdClicked() {}
      @Override
      public void onAdFailedToLoad(@Nullable AdRequestError error) {}
      @Override
      public void onAdLoaded() {}
      @Override
      public void onImpression(@Nullable ImpressionData impressionData) {}
      @Override
      public void onLeftApplication() {}
      @Override
      public void onReturnedToApplication() {}
  }
  ```

{% endlist %}

## 检查集成

<!-- source: zh/easy/_includes/notes-android-easy-guide.md -->
创建并运行您的项目。您可以通过在 **Logcat** 中搜索 `YandexAds` 关键字来检查集成是否成功：
<!-- endsource: zh/easy/_includes/notes-android-easy-guide.md -->

```
[Integration] Ad type banner was integrated successfully
```
