How to move a view above Snackbar just like FloatingButton

前端 未结 8 544
伪装坚强ぢ
伪装坚强ぢ 2021-01-31 07:50

I got a linear layout that I want to move up when a Snackbar appears.

I saw many examples how to do this with FloatingButton, but what about a regular view?

相关标签:
8条回答
  • 2021-01-31 08:35

    I'm going to elaborate on the approved answer because I think there's a slightly simpler implementation than that article provides.

    I wasn't able to find a built-in behavior that handles a generic moving of views, but this one is a good general purpose option (from http://alisonhuang-blog.logdown.com/posts/290009-design-support-library-coordinator-layout-and-behavior linked in another comment):

    import android.content.Context;
    import android.support.annotation.Keep;
    import android.support.design.widget.CoordinatorLayout;
    import android.support.design.widget.Snackbar;
    import android.support.v4.view.ViewCompat;
    import android.util.AttributeSet;
    import android.view.View;
    
    @Keep
    public class MoveUpwardBehavior extends CoordinatorLayout.Behavior<View> {
    
        public MoveUpwardBehavior() {
            super();
        }
    
        public MoveUpwardBehavior(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
            return dependency instanceof Snackbar.SnackbarLayout;
        }
    
        @Override
        public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
            float translationY = Math.min(0, ViewCompat.getTranslationY(dependency) - dependency.getHeight());
            ViewCompat.setTranslationY(child, translationY);
            return true;
        }
    
        //you need this when you swipe the snackbar(thanx to ubuntudroid's comment)
        @Override
        public void onDependentViewRemoved(CoordinatorLayout parent, View child, View dependency) {
            ViewCompat.animate(child).translationY(0).start();
        }
    }
    

    then, in your layout file add a layout_behavior as below:

    <LinearLayout
        android:id="@+id/main_content"
        android:orientation="vertical"
        app:layout_behavior="com.example.MoveUpwardBehavior"/>
    

    where the layout_behavior is the full path to your custom behavior. There's no need to subclass LinearLayout unless you have a specific need to have a default behavior, which seems uncommon.

    0 讨论(0)
  • 2021-01-31 08:38

    NO need of Co-ordinator layout using a regular view align the snack bar to the bottom of the view, and place the button on top of it, on click of button of whatever your logic is show snackbar or linear layout.

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    /*snackbar code
    
     <LinearLayout
                android:id="@+id/linear_snack bar"
                android:layout_width="match_parent"
                android:layout_height="@dimen/margin_45"
                android:layout_alignParentBottom="true"
                android:layout_marginTop="@dimen/margin_0"
                android:background="@color/dark_grey">
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@color/orange"
                    android:gravity="center"
                    android:textColor="@color/white"
                    android:textSize="@dimen/text_size_h7" />
    
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textSize="@dimen/text_size_h7" />
            </LinearLayout>
    
    <View  android:layout_above="@+id/linear_snack bar"
    
    
    
    </RelativeLayout>
    
    0 讨论(0)
提交回复
热议问题