问题描述
下午好。这是我在社区的第一次咨询。我正在尝试使用官方文档实现自适应横幅,但该示例已弃用术语,并且 Android Studio 提供的帮助让我感到困惑。 我在论坛上找了几个小时,但没有找到可以帮助我的答案。 如果您能帮助我使用 Kotiln for SDK 30 实现自适应横幅,我将不胜感激。
private lateinit var adView: AdView
private val adSize: AdSize
get() {
val display = windowManager.defaultdisplay
val outMetrics = displayMetrics()
display.getMetrics(outMetrics)
val density = outMetrics.density
var adWidthPixels = frameAnuncio.width.toFloat()
if (adWidthPixels == 0f) {
adWidthPixels = outMetrics.widthPixels.toFloat()
}
val adWidth = (adWidthPixels / density).toInt()
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this,adWidth)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_receta)
val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
supportActionBar?.setdisplayHomeAsUpEnabled(true)
MobileAds.initialize(this) { }
adView = AdView(this)
frameAnuncio.addView(adView)
loadBanner()
}
private fun loadBanner() {
adView.adUnitId = AD_UNIT_ID
adView.adSize = adSize
val adRequest = AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build()
adView.loadAd(adRequest)
}
companion object {
private val AD_UNIT_ID = "ca-app-pub-3940256099942544~3347511713"
}
Admob 依赖项是: 实施 'com.google.android.gms: play-services-ads: 19.6.0'
谢谢
解决方法
对于第一部分,您可以使用 windowManager.currentDisplayMetrics
来访问窗口边界。和 resources.displayMetrics
用于访问密度。
private val adSize: AdSize
get() {
val metrics = windowManager.currentWindowMetrics
val density = resources.displayMetrics.density
var adWidthPixels = frameAnuncio.width.toFloat()
if (adWidthPixels == 0f) {
adWidthPixels = metrics.bounds.width().toFloat()
}
val adWidth = (adWidthPixels / density).toInt()
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this,adWidth)
}
documentation here 中解释了添加测试设备的新方法。
,尝试使用它为文档中的原始代码片段提供相同的值
private AdSize getAdSize() {
DisplayMetrics outMetrics = getResources().getDisplayMetrics();
float widthPixels = getScreenWidth();
float density = outMetrics.density;
int adWidth = (int) (widthPixels / density);
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this,adWidth);
}
public int getScreenWidth() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
WindowMetrics windowMetrics = getWindowManager().getCurrentWindowMetrics();
Insets insets = windowMetrics.getWindowInsets()
.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars());
return windowMetrics.getBounds().width() - insets.left - insets.right;
} else {
DisplayMetrics outMetrics = getResources().getDisplayMetrics();
return outMetrics.widthPixels;
}
}