我正在尝试使用Snackbar
。我有一个FloatingActionButton
包裹在CoordinatorLayout
中。显示Snackbar
时,按钮正确向上移动。当它自动关闭时,按钮向下移动。但是,如果我以编程方式解除Snackbar
,则该按钮不会停止。我的代码很简单:
mSnackbar = Snackbar.make(mCoordinatorLayout, text, Snackbar.LENGTH_LONG)
.setAction(R.string.undo, new View.OnClickListener() {
@Override
public void onClick(View v) {
undoDeleteTasks();
}
});
mSnackbar.show();
当FloatingActionButton
以编程方式解散时,有没有办法让Snackbar
向下移动?
答案 0 :(得分:16)
试试这个:
Snackbar mysnack = Snackbar.make( fab, "Hi, welcome to my app!", Snackbar.LENGTH_LONG );
mysnack.getView().addOnAttachStateChangeListener( new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow( View v ) {
}
@Override
public void onViewDetachedFromWindow( View v ) {
fab.setTranslationY( 0 );
}
});
mysnack.show();
答案 1 :(得分:12)
问题是,在CoordinatorLayout
中,FAB会被移动,因为当onDependentViewChanged()
动画进出时会调用其行为类Snackbar
。
但是,当您致电Snabackbar.dismiss()
时,不会发生任何动画。因此没有onDependentViewChanged()
。因此,FAB的运动。
我想知道是否有可能
Farzad119的回答可以说有点脆弱。我的方法 - 虽然也不令人满意 - 是改变FAB上的行为,以便在移除SnackBar
时移动FAB:
@Override
public void onDependentViewRemoved(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
super.onDependentViewRemoved(parent, child, dependency);
float translationY = Math.min(0, parent.getBottom() - child.getBottom());
child.setTranslationY(translationY);
}
答案 2 :(得分:2)
为了解决这个问题,我定义了一个像这样的RelativeLayout行为。这可以针对任何视图完成,只需将所有RelativeLayout替换为所需的UI元素。
<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/main_coordinate_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#323232"
tools:context="com.choch.michaeldicioccio.myapplication.MainActivity">
<RelativeLayout
android:id="@+id/bottom_navigation_relative_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="bottom"
app:layout_behavior="com.yourPackagePath.RelativeLayoutBehavior" >
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/colorPrimary"
android:clickable="true"
app:elevation="8dp"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@drawable/bottom_navigation_color_selector"
app:itemTextColor="@drawable/bottom_navigation_color_selector"
app:menu="@menu/bottom_bar_menu" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/add_car_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_above="@id/bottom_navigation"
android:layout_margin="@dimen/fab_margin"
android:scaleType="center"
android:src="@mipmap/ic_plus_black_36dp"
android:tint="@color/colorPrimary"
app:elevation="8dp"/>
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>
然后你需要将Behavior添加到RelativeLayout“android:layout_behavior”属性中。确保要向上滑动的RelativeLayout也在CoordinateLayout内。
if(isset(Input::file('photo'))