2016-05-06 98 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(); 
     } 

    }