あなたが従う例はかなり不運です。FloatingActionButton
withinのデフォルトの動作はCoordinatorLayout
、 を表示するときに上に移動することですSnackBar
。このコードは をオーバーライドするBehavior
ため、メソッドがスーパー クラスの実装を呼び出すことがないため、この機能が失われます。明らかに、著者はこれについて考えていません。ただし、 を変更しScrollingFABBehavior
てオリジナルを拡張し、Behavior
をサポートすることができSnackBar
ます。
public class ScrollingFABBehavior extends FloatingActionButton.Behavior {
private int toolbarHeight;
public ScrollingFABBehavior(Context context, AttributeSet attrs) {
super();
this.toolbarHeight = Utils.getToolbarHeight(context);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
return super.layoutDependsOn(parent, fab, dependency) || (dependency instanceof AppBarLayout);
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton fab, View dependency) {
boolean returnValue = super.onDependentViewChanged(parent, fab, dependency);
if (dependency instanceof AppBarLayout) {
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
int fabBottomMargin = lp.bottomMargin;
int distanceToScroll = fab.getHeight() + fabBottomMargin;
float ratio = (float)dependency.getY()/(float)toolbarHeight;
fab.setTranslationY(-distanceToScroll * ratio);
}
return returnValue;
}
}
これは実際にはサンプルのgithub リポジトリのクラスです。同じコードを自分でコーディングしてテストした直後に見つけました。彼らはブログ投稿を更新するのを忘れただけです:-/