Android使浮动操作菜单处于FIXED位置

时间:2016-11-23 09:21:10

标签: android listview scroll fixed floating-action-button

嗨,我是Android开发新手。

我设置了以下代码:

listView.setNestedScrollingEnabled(true);

在滚动listView时隐藏顶部工具栏。但是,会移动所有子视图,包括浮动操作菜单。

我希望浮动操作菜单保持空闲状态,固定在该位置,而不受NestedScrollingEnabled行为的影响。显然它会影响父视图。

enter image description here

对此有何解决方案?谢谢。

我的xml大致看起来像这样(只是忽略附加的图像,它与xml代码不同,因为它太长了,但总的想法就在那里):

<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>

1 个答案:

答案 0 :(得分:0)

使用自定义布局行为atrribute滚动列表视图时,可以隐藏FAB按钮

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" />