浮动动作按钮滚动奇怪的行为

时间:2016-07-31 23:40:30

标签: java android xamarin xamarin.android android-coordinatorlayout

我有一个FloatingActionButton实现了向下滚动时隐藏它的行为,并在向上滚动时显示它。

然而,有时当我向上滚动时,它会隐藏自己然后再次出现。根据我的代码,这是不可理解的,因为它只应在向下滚动时隐藏。

也许它与我同时滚动的CollapsingToolbar相关联?

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
   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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="right"
    android:focusableInTouchMode="true"
    android:clickable="true"
    android:layoutDirection="rtl"
    android:fitsSystemWindows="true"
    android:id="@+id/drawer_layout">
  <android.support.design.widget.CoordinatorLayout
      android:id="@+id/mainCoordinatorLayout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:fitsSystemWindows="true"
      android:layoutDirection="rtl"
      android:background="#EEEEEE"
      android:clickable="true">
    <android.support.design.widget.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:fitsSystemWindows="true"
        android:id="@+id/toolbar_layout">
      <android.support.design.widget.CollapsingToolbarLayout
          android:id="@+id/collapsing_toolbar"
          android:layout_width="match_parent"
          android:layout_height="256dp"
          android:fitsSystemWindows="true"
          app:layout_scrollFlags="scroll|exitUntilCollapsed"
          app:contentScrim="?attr/colorPrimary"
          app:collapsedTitleGravity="right|top"
          app:expandedTitleGravity="bottom|right"
          app:expandedTitleMarginBottom="64dp"
          app:collapsedTitleTextAppearance="@style/CollapsedTitleTextAppearance"
          app:expandedTitleTextAppearance="@style/ExpandedTitleTextAppearance"
          app:expandedTitleMarginEnd="0dp"
          app:expandedTitleMarginStart="30dp">
        <ImageView
            android:id="@+id/headerImage"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            app:layout_collapseMode="parallax"
            android:background="@drawable/soldier" />
        <View
            android:fitsSystemWindows="true"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="@drawable/scrim_top"
            app:layout_collapseMode="pin" />
        <View
            android:fitsSystemWindows="true"
            android:layout_width="match_parent"
            android:layout_height="88dp"
            android:layout_gravity="bottom"
            android:layout_alignBottom="@+id/headerImage"
            android:background="@drawable/scrim_bottom" />
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="104dp"
            android:gravity="top"
            app:titleTextColor="@color/White"
            android:layout_gravity="right"
            android:layoutDirection="rtl"
             app:layout_scrollFlags="scroll|enterAlways"
            app:layout_collapseMode="pin"
            app:contentScrim="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:titleMarginTop="15dp" />
        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_gravity="bottom"
            app:tabIndicatorHeight="3dp"
            android:layoutDirection="ltr"
            app:tabIndicatorColor="@android:color/white"
            app:tabSelectedTextColor="@color/White"
            app:tabTextColor="@color/Black"
            style="@style/MyCustomTabLayout"
            app:tabMode="fixed"
            app:tabGravity="fill">
          <android.support.design.widget.TabItem
              android:icon="@drawable/ic_book_white_24px"
              android:text="ספרים" />
          <android.support.design.widget.TabItem
              android:icon="@drawable/soldierWhite"
              android:text="הלכות" />
          <android.support.design.widget.TabItem
              android:icon="@drawable/ic_home_white_24px"
              android:text="בית" />
        </android.support.design.widget.TabLayout>

      </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>    
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/content_frame"
        android:visibility="gone"
        android:animateLayoutChanges="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        app:behavior_overlapTop="0dp">
    </FrameLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/mainPager"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:behavior_overlapTop="0dp"
        />
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/mainFab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_gravity="bottom|end"
        android:layout_marginLeft="16dp"
        android:layout_marginBottom="16dp"
        android:layout_marginTop="5dp"
        android:elevation="8dp"
        app:layout_behavior="@string/fab_scroll_translation_autohide_behavior"
        app:pressedTranslationZ="12dp"
        app:backgroundTint="?android:colorAccent"
        android:src="@drawable/ic_perm_phone_msg_white_24px" />
    <LinearLayout
        android:id="@+id/miniFabFrame"
        android:focusableInTouchMode="true"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:layout_alignParentLeft="true"
        android:layout_gravity="bottom|end"
        android:layout_marginLeft="20dp"
        android:layout_marginBottom="80dp"
        android:padding="0dp">
      <android.support.design.widget.FloatingActionButton
          android:id="@+id/messageFab"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_alignParentLeft="true"
          android:elevation="8dp"
          android:layout_marginTop="5dp"
          android:layout_marginRight="0dp"
          android:layout_marginBottom="5dp"
          android:layout_marginLeft="5dp"
          app:pressedTranslationZ="12dp"
          app:backgroundTint="?android:colorPrimary"
          app:fabSize="mini"
          android:src="@drawable/ic_textSMS_white_24px" />
      <android.support.design.widget.FloatingActionButton
          android:id="@+id/callFab"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_alignParentBottom="true"
          android:layout_alignParentLeft="true"
          android:layout_marginTop="5dp"
          android:layout_marginRight="0dp"
          android:layout_marginBottom="5dp"
          android:layout_marginLeft="5dp"
          android:elevation="8dp"
          app:pressedTranslationZ="12dp"
          app:backgroundTint="?android:colorPrimary"
          app:fabSize="mini"
          android:src="@drawable/ic_call_white_24px" />
    </LinearLayout>
  </android.support.design.widget.CoordinatorLayout>
  <android.support.design.widget.NavigationView
      android:layout_width="wrap_content"
      android:layout_height="match_parent"
      android:layout_gravity="right"
      android:id="@+id/nav_view"
      android:layoutDirection="rtl"
      app:headerLayout="@layout/header"
      app:menu="@menu/nav_menu" />
</android.support.v4.widget.DrawerLayout>

这是我的行为:

[Register("ToratHamachane.ScrollAwareFABBehavior")]
public class ScrollAwareFABBehavior : CoordinatorLayout.Behavior
{
    public ScrollAwareFABBehavior(Context context, IAttributeSet attrs) : base(context, attrs)
    {
    }

    public override bool OnStartNestedScroll(CoordinatorLayout coordinatorLayout, Java.Lang.Object child, View directTargetChild, View target, int nestedScrollAxes)
    {
        return nestedScrollAxes == ViewCompat.ScrollAxisVertical ||
                 base.OnStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
    }

    public override void OnNestedScroll(CoordinatorLayout coordinatorLayout, Java.Lang.Object child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed)
    {
        base.OnNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);

        var floatingActionButtonChild = child.JavaCast<FloatingActionButton>();

        if (dyConsumed > 0 && floatingActionButtonChild.Visibility == ViewStates.Visible)
            floatingActionButtonChild.Hide();
        else if (dyConsumed < 0 && floatingActionButtonChild.Visibility != ViewStates.Visible)
            floatingActionButtonChild.Show();

    }
}

为什么会发生这种情况的任何想法? 我很感激任何帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

致电超级

class Author extends DataObject{

private static $db = array (
 'AuthorName' => 'Varchar',
    );

    private static $has_many = array (
     'Theses' => 'Theses',
    );

public function canView($member = null) {
    return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}

public function canEdit($member = null) {
    return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}

public function canDelete($member = null) {
    return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}

public function canCreate($member = null) {
    return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}

private static $summary_fields = array(
    'AuthorName',
); }?>

如果这不能解决您的问题,请向您的折叠工具栏添加行为。

你为什么这样做?

public ScrollAwareFABBehavior(Context context, IAttributeSet attrs) : base(context, attrs){
super();
}

您可以使用子代替floatingActionButtonChild。

答案 1 :(得分:0)

使用此调用设置浮动操作按钮的滚动行为。

public class ScrollAwareFabBehaviour extends FloatingActionButton.Behavior {

    public ScrollAwareFabBehaviour(Context context, AttributeSet attrs) {
        super();
    }

    @Override
    public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
                                       final View directTargetChild, final View target, final int nestedScrollAxes) {
        // Ensure we react to vertical scrolling
        return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
                || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
    }

    @Override
    public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
                               final View target, final int dxConsumed, final int dyConsumed,
                               final int dxUnconsumed, final int dyUnconsumed) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
        if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
            // User scrolled down and the FAB is currently visible -> hide the FAB
            child.hide();
        } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
            // User scrolled up and the FAB is currently not visible -> show the FAB
            child.show();
        }
    }

}

并在您的xml中,您设计了FAB设置其行为

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab_add_note"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="@dimen/fab_margin"
        android:clickable="true"
        android:src="@drawable/ic_add_white_24dp"
        app:backgroundTint="@color/blue_grey_accent_color"
        app:layout_anchor="@id/recycler_notes"
        app:layout_anchorGravity="bottom|right|end"
        app:layout_behavior="@string/fab_behaviour"
        app:rippleColor="#FFF" />
strings.xml中的

定义了你的行为类

<string name="fab_behaviour">com.suman.swets.example.uiviews.ScrollAwareFabBehaviour</string>