2016-05-06 65 views
1

我有一個在協調器佈局內有5個標籤的佈局。android:僅在第一個標籤上顯示晶圓廠圖標

我想僅在第一個選項卡上顯示晶圓廠圖標並隱藏其餘的圖標。

我想這和它的工作:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
      } 

      @Override 
      public void onPageSelected(int position) { 

       switch (position) { 
        case 0: 
         fab.show(); 
         break; 

        default: 
         fab.hide(); 
         break; 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

問題我也想爲FAB按鈕hide on scrolling效果。

所以我創建延伸FloatingActionButton.Behavior一個ScrollAwareFABBehavior類和CoordinatorLayout行爲相關聯的浮動操作按鈕

package com.simha.yatras;  
import android.content.Context; 
import android.support.design.widget.CoordinatorLayout; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.view.ViewCompat; 
import android.util.AttributeSet; 
import android.view.View; 

public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { 
    public ScrollAwareFABBehavior(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(); 
     } 
    } 
} 

而且通過

<android.support.design.widget.FloatingActionButton 
. 
. 
app:layout_behavior="com.simha.yatras.ScrollAwareFABBehavior"/> 

實現,如果我從有到任何標籤第一個標籤,圖標消失。 (這是我想要的)。但如果我滾動,在該選項卡內,如果我在頂部並且在到達底部時消失,則圖標可見。

它出現在所有的選項卡中。

ScrollAwareFABBehavior正在所有選項卡上執行操作。如何限制它僅在第一個選項卡上執行操作。

回答

0

我得到了它的工作。我最近在stackoverflow上找到了解決方案。 Android - FAB to hide when navigating between different fragments in a viewpager

在MainActivity添加viewPager靜態然後在滾動行爲做

if (MainActivity.viewPager.getCurrentItem() == 0) { 
     if (dyConsunmed > 0 && child.getVisibility() == View.VISIBLE) { 
      child.hide(); 
     } else if (dyConsunmed < 0 && child.getVisibility() != View.VISIBLE) { 
      child.show(); 
     } 

    }