在Google Maps API片段中的方向弹出窗口上方移动浮动操作按钮?

时间:2016-08-03 03:23:56

标签: android android-fragments google-maps-android-api-2 android-coordinatorlayout floating-action-button

我在Android Studio中使用Google Maps API(通过默认的Google Maps Activity)。我已启用setMyLocationEnabled(true),但设置setMyLocationButtonEnabled为false,因为我想添加一个自定义浮动操作按钮,这对我来说更适合移动到当前位置。单击标记时,API会自动在地图片段右下方生成指向该标记的方向按钮,但我实施的FAB会覆盖这些按钮。

FAB covers API directions http://i63.tinypic.com/eg48m.png

在查看this answer之后,我将地图片段和浮动操作按钮包裹在CoordinatorLayout中,希望它会在点击标记时向上移动FAB,就像吃零食栏一样,但它没有按'吨。有没有办法手动激活该动作或至少用触摸事件或类似的东西模拟它?我试图寻找在运行时移动FAB的方法(例如this)但是我没有成功找到适合我情况的解决方案。

以下是活动布局的xml,如果需要更多信息,请告诉我。提前谢谢!

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="(hidden for privacy)"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/find_my_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/ic_my_location_gray"
        app:backgroundTint="@color/white"/>
</android.support.design.widget.CoordinatorLayout>

1 个答案:

答案 0 :(得分:0)

我认为从xml向您的FAB提供android:layout_marginBottom不起作用,或者您不喜欢此解决方案,因此:

如果您不需要,可以使用setMapToolbarEnabled()隐藏底部的方向按钮:googleMap.getUiSettings().setMapToolbarEnabled(false);

或使用GoogleMap.OnMarkerClickListener:

收听标记点击

googleMap.setOnMarkerClickListener(this);

然后在onMarkerClick()中执行任何操作:

@Override
public boolean onMarkerClick(Marker marker) {
        //give some margin programmatically
        //return false to preserve the default behaviour, true o/w 
        return true;
}