由于 API 30
中已弃用方法 getDefaultDisplay();
和 getMetrics()
,以下代码无法正常工作。
private AdSize getAdSize() {
Display display = getWindowManager().getDefaultDisplay();//deprecated
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);//deprecated
float density = outMetrics.density;
float widthPixels = adContainerView.getWidth();
if (widthPixels == 0) {
widthPixels = outMetrics.widthPixels;
}
int adWidth = (int) (widthPixels / density);
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(this, adWidth);
}
Google
要求使用 WindowMetrics#getBounds() 获取应用程序窗口区域的尺寸,并使用 Configuration#densisDpi 获取当前密度。
我找到了 API 30
的这些方法,但我不知道如何使用它们。
final WindowMetrics metrics = windowManager.getCurrentMetrics();
// Gets all excluding insets
final WindowInsets windowInsets = metrics.getWindowInsets();
Insets insets = windowInsets.getInsets(WindowInsets.Type.navigationBars());
final DisplayCutout cutout = windowInsets.getCutout();
if (cutout != null) {
final Insets cutoutSafeInsets = Insets.of(cutout.getSafeInsetsLeft(), ...);
insets = insets.max(insets, cutoutSafeInsets);
}
int insetsWidth = insets.right + insets.left;
int insetsHeight = insets.top + insets.bottom;
// Legacy size that Display#getSize reports
final Size legacySize = new Size(metrics.getWidth() - insetsWidth,
metrics.getHeight() - insetsHeight);
有人遇到过这种情况吗?
最佳答案
我使用这个方法:
private AdSize getAdSize() {
DisplayMetrics outMetrics = getResources().getDisplayMetrics();
float widthPixels = outMetrics.widthPixels;
float density = outMetrics.density;
int adWidth = (int) (widthPixels / density);
return AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(requireContext(), adWidth);
}
对于 LinearLayout,用于查看自适应横幅:
LinearLayout banner_view = findViewById(R.id.banner_view);
AdView adView = new AdView(requireActivity().getApplicationContext());
adView.setAdUnitId(getString(R.string.my_banner_id));
banner_view.addView(adView);
AdRequest adRequest = new AdRequest.Builder().build();
AdSize adSize = getAdSize(); // Code above
adView.setAdSize(adSize);
adView.loadAd(adRequest);
关于android - 如何获取自适应横幅 (Admob) API 30 的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63188197/