带有协调器视图的 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);
}
我已经成功地在片段中使用包裹在 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);
}