带有协调器视图的 snackbar 出现后布局视图卡住

Layout view stuck after snackbar appears with coordinator view

我已经成功地在片段中使用包裹在 MapView 周围的协调器布局来展示小吃店。地图视图成功向上滑动,为小吃店留出空间,但是,一旦小吃店消失,视图就会保持原样,并在小吃店出现的地方留下一个白色的酒吧。我怎样才能解决这个问题?我目前在地图视图上应用以下代码作为行为:

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
        child.setTranslationY(translationY);
        return true;
    }

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
        // we only want to trigger the change
        // only when the changes is from a snackbar
        return dependency instanceof Snackbar.SnackbarLayout;
    }

我的片段视图是这样的:

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

    <com.google.android.gms.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="com.adamshort.canieatthis.FloatingActionButtonBehaviour"/>

</android.support.design.widget.CoordinatorLayout>

我试过四处搜索,但要么我搜索错误,要么没有人遇到过类似问题。我已经看到我在各种教程和视频中发布并成功运行的行为代码,但它在地图视图中表现不佳。有什么想法吗?

拜托,我下面的回答是试图帮助你...如果对你有帮助,请告诉我...然后,如果它没有用,我会删除...

也许,您需要定义并定位到您的 MapView。在我的例子中,我必须在底部创建一个虚拟视图并将其设置为将随 SnackBar

移动的视图的 archor
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/places_coordinator_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.Space
        android:id="@+id/anchor"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/transparent"
        android:layout_gravity="bottom" />

        <com.google.android.gms.maps.MapView
            android:id="@+id/mapView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_anchor="@id/anchor"
            app:layout_behavior="com.adamshort.canieatthis.FloatingActionButtonBehaviour"/>

</android.support.design.widget.CoordinatorLayout>

这是 Google 的目的,以防止干扰辅助功能操作。 https://code.google.com/p/android/issues/detail?id=209953

遇到了完全相同的问题。

为了解决这个问题,我更改了 onDependentViewChanged() 方法来存储此行为附加到的视图的初始 Y 位置。然后在删除调用 onDependentViewRemoved() 方法的快餐栏时,将该视图的位置重置为存储的 Y 位置。

private static float initialPositionY;

@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
    initialPositionY = child.getY();
    float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
    child.setTranslationY(translationY);
    return true;
}

@Override
public void onDependentViewRemoved(CoordinatorLayout parent, View child, View dependency) {
    super.onDependentViewRemoved(parent, child, dependency);
    child.setTranslationY(initialPositionY);
}