14

我想在运行时移动谷歌地图布局项目,但我做不到,我不知道这是否可能。我想做的是:我有一个占据整个屏幕的谷歌地图片段。我也有一个广告。当应用程序启动时,我会显示地图。像这样:

在此处输入图像描述

当广告加载时,我会在底部显示广告,但我需要将 Google 徽标移到广告上方。像这样:

在此处输入图像描述

我试过:

if (banner is loaded)
googleMap.setPadding(0, 0, 0, banner.getLayoutParams().height);

但我没有成功。我究竟做错了什么?

编辑:感谢@SimplePlan,我将包含mapfragment的RelativeLayout更改为FrameLayout:

<FrameLayout >
    <fragment
        android:id="@+id/map"
        class="com.google.android.gms.maps.SupportMapFragment" />

    <com.inmobi.monetization.IMBanner
        android:layout_gravity="bottom" />
</FrameLayout>

我在广告中添加了一个监听器:

banner.setIMBannerListener(new IMBannerListener() {
    @Override
    public void onBannerRequestSucceeded(IMBanner arg0) {
        googleMap.setPadding(0, 0, 0, banner.getLayoutParams().height);
    }
});
4

3 回答 3

17

只要布局过程未完成,视图的维度就设置为0。使用Handler,您可以在布局完成后设置地图的内边距。

    new Handler().post(new Runnable() {
        @Override
        public void run() {
            mapHelper.map.setPadding(0,0,0,ad.getHeight());
        }
    });
于 2015-08-11T17:40:48.020 回答
0

更好的方法是不使用 FrameLayout 而是使用RelativeLayout并将地图的关系放在横幅上方。因此,每当横幅出现时,您的地图就会相应地向上移动。

<RelativeLayout>
    <fragment
        android:id="@+id/map"
        class="com.google.android.gms.maps.SupportMapFragment"
        android:layout_above="@id/banner"
        />

    <com.inmobi.monetization.IMBanner
        android:id="@+id/banner"
        android:layout_gravity="bottom" />
</RelativeLayout>
于 2021-11-08T06:25:47.057 回答
0

我们现在可以在视图加载完成后使用 KTX 扩展来执行一些视图逻辑:

https://developer.android.com/reference/kotlin/androidx/core/view/package-summary#(android.view.View).doOnLayout(kotlin.Function1)

于 2021-10-25T06:21:04.250 回答