0

私のレイアウトは、このチュートリアルとまったく同じです。ただし、このチュートリアルでapp:layout_behavior="pl.michalz.hideonscrollexample.ScrollingFABBehavior" は Fab XML で使用するため、Fab についてSnackBar説明します。このコードがないと Fab は動かず、その後にRecyclerView. SnackBar正しく表示するには?

Snackbar.make(getActivity().findViewById(R.id.coordinatorLayout),
adapter.getNewsList().get(position).getTitle(), Snackbar.LENGTH_LONG).show();
4

2 に答える 2

2

あなたが従う例はかなり不運です。FloatingActionButtonwithinのデフォルトの動作は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 リポジトリのクラスです。同じコードを自分でコーディングしてテストした直後に見つけました。彼らはブログ投稿を更新するのを忘れただけです:-/

于 2015-07-29T12:27:49.937 に答える
0

これを試しましたか?

...
View view = inflater.inlfate(R.layout.my_layout, parent, false);
...
Snackbar.make(view.findViewById(R.id.fab),
        adapter.getNewsList().get(position).getTitle(), Snackbar.LENGTH_LONG).show();
...
return view;

上記のコードを で呼び出すと仮定して、メソッドを呼び出す変数Fragmentを追加しました。viewfindViewById()

于 2015-07-29T12:28:57.370 に答える