2016-05-06 12 views
1

コーディネーターのレイアウト内に5つのタブがあるレイアウトがあります。android:最初のタブにのみfabアイコンを表示

ファブアイコンを最初のタブにのみ表示し、残りの部分を非表示にしたいとします。

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

      } 
     }); 

問題は、私はまた、工場のボタンのhide on scrolling効果が欲しかったです。

私はこれとその作業を試してみました。

ので、私はFloatingActionButton.Behaviorを拡張ScrollAwareFABBehaviorクラスを作成し、フローティングアクションボタン

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(); 
     } 
    } 
} 

にCoordinatorLayoutの動作を関連付け、私はから任意のタブになった場合

<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

その後、スクロールの挙動に

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

    } 
を行うMainActivityの静的としてviewPagerを追加
関連する問題