7

मेरे पास 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(); 

    } 
} 

कोई भी विचार क्यों यह हो रहा जा सकता है? मैं किसी भी मदद की सराहना करता हूं।

धन्यवाद।

उत्तर

0

सुपर कॉल करें।

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

यदि यह आपकी समस्या का समाधान नहीं करेगा, तो अपने collapsingtoolbar पर व्यवहार जोड़ें।

और आप ऐसा क्यों करते हैं?

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

आप केवल बच्चे के बजाय फ़्लोटिंगएक्शनबटन चिल्ड का उपयोग कर सकते हैं।

+0

क्षमा की तरह अपने व्यवहार वर्ग को परिभाषित strings.xml में अपने व्यवहार

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

निर्धारित किया है। लेकिन यह काम नहीं करता है। मैं Xamarin का उपयोग कर रहा हूँ, और एक सुपर विधि नहीं है। समकक्ष, "आधार", काम नहीं करता है। ढहने वाले टूलबार में व्यवहार भी जोड़ना काम नहीं करता है। – amitairos

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 में, जहाँ आप अपने फैब तैयार की है इस

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

मुझे खेद है, लेकिन यह मेरी मदद नहीं करता है। हो सकता है कि जावा में काम करता है, लेकिन मैं एक्स # के साथ एक्समरिन का उपयोग कर रहा हूं, और जिस कोड को मैंने ऊपर पोस्ट किया है वह मेरे लिए काम करता है, हालांकि बग के साथ। – amitairos

संबंधित मुद्दे