【问题标题】:Determining actual height of an Admob SmartBanner in Unity for Android在 Unity for Android 中确定 Admob SmartBanner 的实际高度
【发布时间】:2015-01-04 03:10:07
【问题描述】:

所以我在我的 Unity 4.6 Android 游戏中实现了 admob 横幅。我在底部有横幅,需要在我的 UI 中说明它。具体来说,我需要知道它到底有多高,但我无法弄清楚。

根据找到的信息here,智能横幅的高度应为 32、50 或 90 像素,具体取决于设备高度。不过,这似乎不是典型的情况。

一些搜索似乎表明这是因为密度像素。因此,我尝试使用 px = dp * (Screen.dpi/160) 转换规定的像素高度。例如,如果我确定横幅高度应为 90 像素,我将使用 bannerHeight = 90 * (Screen.dpi / 160)。这似乎适用于某些设备,但不适用于其他设备。

例如,我的 Nexus 4 的 DPI 为 320。使用上面的方法似乎表明横幅应该是 180 像素高,但横幅实际上似乎是 90 像素高。但在 Nexus 7(dpi 为 166)上,横幅的高度似乎约为 120 像素,而公式表明它应该为 ~93。

所以我想我不知道如何计算横幅的实际高度,而且我还没有找到从 API 获取此信息的方法。我调用横幅的代码非常实用:

 string adUnitId = "my_id";

 BannerView bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Bottom);
 AdRequest request = new AdRequest.Builder().Build();
 bannerView.LoadAd(request);

【问题讨论】:

    标签: android unity3d admob


    【解决方案1】:

    首先,您需要计算 google 会给您哪些广告(32 或 50 或 90?) 为此,您可以按屏幕尺寸计算。

    height/dpi = 实际高度(英寸)

    所以,Google 说 720 以上(dp 为 160dpi)是准确的 720/160 = 4.5 英寸高度,高于此高度,广告为 90 像素 (dp!) 低于 50 dp! 400/160 = 2.5 ,低于此,广告将为 32 dp

    所以! 如果我有 1920x1080 的小米 mi3 那是, 1920/480dpi = 4 英寸高..这将为我们提供 50 dp 的广告。

    用DP转像素的公式

    px = dp * (Screen.dpi/160)

    50 * (480/160) = 150 像素高度的广告!

    对于横向,您需要使用 1080 而不是 1920 作为“高度” 1080/480dpi = 2.25 横向高度 这意味着广告将为 32 像素 dp

    转换为:

    32* (480/160) = 96 pixels in landscape
    

    太糟糕了,谷歌没有给出足够的例子,所以我们可以真正检查自己。

    您的信息页面是:

    https://developers.google.com/admob/android/banner

    【讨论】:

      【解决方案2】:

      有答案: https://stackoverflow.com/a/14204959/1900546

      int heightPixels = AdSize.SMART_BANNER.getHeightInPixels(this);
      

      【讨论】:

        【解决方案3】:

        以下功能对于使用 Admob 智能横幅的人来说可能会派上用场:

        public static float adHeight(){
            float f = Screen.dpi / 160f;
            float dp = Screen.height / f;
            return (dp>720f)? 90f * f
                  :(dp>400f)? 50f * f
                  :32f * f;
        }
        

        使用它:

        r.offsetMin = new Vector2(r.offsetMin.x, adHeight());
        

        其中 r 是全屏画布/面板的 RectTransform。

        我将“loadBannerAd”脚本附加到每个需要它的面板。

        【讨论】:

          【解决方案4】:

          您提供的链接表明智能横幅的高度为

          1. 横向手机为 32 dp
          2. 50 dp 用于纵向手机
          3. 90 dp 适用于任一方向的平板电脑

          让我们以你给出的两个例子为例。

          Nexus 4 的 DPI 约为 320 dp。鉴于它是一部手机,它会有一个高度为 50 dp 的广告。 使用公式,计算结果为 50 * 320 / 160 = 100 像素(接近实际横幅的高度)

          我查找的 Nexus 7s 有 216 dp (2012) 或 323 dp (2013),所以我不太清楚哪个型号有 166 dp。
          但假设它是 216 dp,那么作为平板电脑,dp 中的广告高度为 90。因此,像素 = 90 * 216 / 160 = 121.5,再次接近横幅的实际高度。

          我知道谷歌也提到了以下内容

          1. 对于高度在 400 到 720 之间的设备,使用高度为 50 的广告
          2. 对于高度超过 720 的设备,使用高度为 90 的广告。

          但是,我相信 400 & 720 MIGHT 也可以用 dp 来表示?即 mdpi 设备中的 400 像素。您的 Nexus 4 是 xhdpi 设备 (320 dp),高度为 1280 像素,则与高度为 640 像素的 mdpi 设备相同,属于 50 dp 的广告高度范围。

          底线,您的计算似乎有效。坚持第一组规则,您应该会看到一致的结果。

          【讨论】:

          • 我在 LANDSCAPE 中使用 Google Pixel 3XL 的高度为 90dp。我不得不蛮力高度为 32dp。
          • 肖像也一样。但是当我蛮力高度时,它会剪掉更大的横幅。
          【解决方案5】:
          bannerView.SetPosition(AdPosition.Top); 
          

          或类似的东西是您如何更改活动横幅的位置

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-07-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-30
            • 2018-01-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多