如何以编程方式在屏幕底部显示AdMob标语广告?科特琳

问题描述

我是Kotlin和Android的新手。我想以编程方式在屏幕底部显示一个AdMob横幅广告。但我只能在屏幕顶部显示它。这是我的代码

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/activityMain"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="false"
        android:scaleType="centerCrop"
        android:id="@+id/rootimageView"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:id="@+id/testTextView"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt:

import android.app.Notification
import android.content.res.Configuration
import android.graphics.Color
import android.media.AudioManager
import android.media.MediaPlayer
import android.media.ToneGenerator
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.view.View
import android.view.WindowManager
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.constraintlayout.widget.ConstraintLayout
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.gms.ads.MobileAds
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if(useAdMob){ initAdMob(); }
    }
    //---------------------------------------------
    fun initAdMob()
    {
        MobileAds.initialize(this);

        val adView = AdView(this);
        adView.adSize = AdSize.BANNER;
        adView.adUnitId = if(testAdMob) idAdMobBannerForTest else idAdMobBanner1;
        val adRequest = AdRequest.Builder().build();
        adView.loadAd(adRequest);

        activityMain.addView(adView);
        adView.setBackgroundColor(Color.RED);
        
        val lp = adView.layoutParams;
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        println(">>>> adView,width: ${lp.width},height: ${lp.height}");
    }
}

我已经搜索了很多解决方案,例如,尝试:

addRule(RelativeLayout.ALIGN_PARENT_BottOM)

添加xml:

android:layout_alignParentBottom="true"

但是这些似乎在最新版本的Android Studio中不可用。 请帮我。预先感谢。

解决方法

我建议不要以编程方式执行此操作,但可以使用ConstraintSet来以编程方式设置约束布局规则。看起来像这样:

adView.id = View.generateViewId() // Need to give view an id

ConstraintSet().apply {
    connect(adView.id,ConstraintSet.BOTTOM,ConstraintSet.PARENT_ID,ConstraintSet.BOTTOM)
    applyTo(constraintLayout) // Your constraint layout here
}

这相当于在xml中做

app:layout_constraintBottom_toBottomOf="parent"
,

由于使用约束布局,请尝试以下代码...

<com.google.android.gms.ads.AdView
   xmlns:ads="http://schemas.android.com/apk/res-auto"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/bannerAd"
   ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
   app:layout_constraintBottom_toBottomOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintEnd_toEndOf="parent"/>

并在kotlin文件中

MobileAds.initialize(this) {}
    var mAdView = findViewById(R.id.bannerAd)
    val adRequest = AdRequest.Builder().build()
    mAdView.loadAd(adRequest)