简体   繁体   中英

Android Makes Floating Action Menu in FIXED position

Hi I'm new in Android dev.

I set the below code:

listView.setNestedScrollingEnabled(true);

to hide the top toolbar when I scroll the listView. However, all child views are moved, including the Floating Action Menu.

I want the Floating Action Menu to stay idle, fixed at the position, and not influenced by the NestedScrollingEnabled behavior. Apparently it affects the parent view.

在此处输入图片说明

Any solution to this? Thank you.

My xml roughly looks like this (Just ignore the attached images which is abit different from the xml codes, because it is too long, but the general idea is there):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:fab="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/fragment_price_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#e3e3e3">

    <android.support.v4.widget.SwipeRefreshLayout
           xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/swipeContainer"
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:layout_below="@+id/buttons_selection_container">

           <FrameLayout
               android:layout_width="match_parent"
               android:layout_height="match_parent">

               <ProgressBar
                android:id="@+id/progressBar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginBottom="15dp"
                android:indeterminateTint="@color/colorProgressBarPrimary"
                android:indeterminateTintMode="src_atop"/>

                <TextView
                android:id="@+id/textView_no_data"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="No Price Data"
                android:layout_gravity="center_horizontal|center_vertical"
                android:textStyle="bold"
                android:textSize="18dp"
                android:visibility="gone"/>

                <ListView
                android:id="@+id/listView_prices"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:nestedScrollingEnabled="true">
                </ListView>
           </FrameLayout>
    </android.support.v4.widget.SwipeRefreshLayout>

    <com.getbase.floatingactionbutton.FloatingActionsMenu
        android:id="@+id/price_fragment_float_Menu_button"
        android:layout_width="322dp"
        android:layout_height="376dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="46dp"
        android:layout_marginRight="10dp"
        fab:fab_addButtonColorNormal="@color/color_float_blue_dark"
        fab:fab_addButtonColorPressed="@color/colorAccent"
        fab:fab_addButtonPlusIconColor="@color/white">

        <com.getbase.floatingactionbutton.FloatingActionButton
            android:id="@+id/button_switch_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            fab:fab_colorNormal="@color/color_float_blue_lite"
            fab:fab_colorPressed="@color/colorAccent"
            fab:fab_icon="@drawable/button_different_currencies"
            fab:fab_size="mini"
            fab:fab_title="Switch Price"/>
    </com.getbase.floatingactionbutton.FloatingActionsMenu>
</RelativeLayout>

You can hide the FAB button when the listview is scrolled using a custom layout behavior atrribute

public class ScrollingFABBehavior extends FloatingActionButton.Behavior {


private static final String TAG = "ScrollingFABBehavior";

public ScrollingFABBehavior(Context context, AttributeSet attrs) {
    super();
    // Log.e(TAG, "ScrollAwareFABBehavior");
}


public boolean onStartNestedScroll(CoordinatorLayout parent, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {

    return true;
}

@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
    if (dependency instanceof RecyclerView)
        return true;

    return false;
}

@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout,
                           FloatingActionButton child, View target, int dxConsumed,
                           int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
    // TODO Auto-generated method stub
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
            dxUnconsumed, dyUnconsumed);
    //Log.e(TAG, "onNestedScroll called");
    if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
     //   Log.e(TAG, "child.hide()");
        child.hide();
    } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
      //  Log.e(TAG, "child.show()");
        child.show();
    }
}}

layout xml

<android.support.design.widget.FloatingActionButton
    android:id="@+id/imageViewYes"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end|right"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/ic_yes"
    app:backgroundTint="@color/white"
    android:scaleType="center"
    app:elevation="6dp"
    app:fabSize="normal"
    app:layout_behavior="com.your.package.ScrollingFABBehavior" />

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM