コーディネーターのレイアウト内に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が動作しています。最初のタブでのみ動作するように制限する方法。