android - 如何获取自适应横幅 (Admob) API 30 的尺寸

标签 android admob size screen

由于 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/

相关文章:

android - AdLoader 始终加载内容广告

forms - VB.NET 调整表单大小并检测文本框中的大小

java - 在android中比较两张脸

安卓菜单标签

android - 从数据库填充 fragment 列表

swift - IOS10、Xcode 8.2 谷歌 Admob 问题

android - 怎么删除sd卡里的图片

android - admob 广告 ID 可以在公共(public) GitHub 存储库上共享吗?

java - JTextField 固定高度

c - c中数组的大小