问题描述
我是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)