Как опустить FloatingActionButton вниз?

У меня есть ScrollingActivity.FAB прикреплена к AppBarLayout.

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@drawable/ic_check_white_48dp"
        app:layout_anchor="@id/carSelectAppBar"
        app:layout_anchorGravity="bottom|end"
        />

Я хочу, чтобы при разрушении CollapsingToolBarLayout кнопка прикреплялась к элементу include в ScrollingActivity.
То есть, откреплялась от AppBar и улетала вниз.
Я использую следующий код:

mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.carSelectToolbar);
        mAppBarLayout = (AppBarLayout) findViewById(R.id.carSelectAppBar);
        mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            int scrollRange = -1;
            boolean isShow = false;

            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

                if (scrollRange == -1) {
                    scrollRange = appBarLayout.getTotalScrollRange();
                }
                if (scrollRange + verticalOffset == 0) {
                    isShow = true;
                    changeFloatButtonState(isShow,fab);
                } else if (isShow) {
                    isShow = false;
                    changeFloatButtonState(isShow,fab);
                }

            }
        });

private void changeFloatButtonState(boolean isShow,FloatingActionButton fab) {
        if (!isShow) {
            CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
            params.setAnchorId(R.id.carSelectAppBar);
            params.anchorGravity = Gravity.BOTTOM | Gravity.END;
            fab.setLayoutParams(params);

        } else {
            CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
            params.setAnchorId(R.id.carSelectContentLayout);
            params.anchorGravity = Gravity.BOTTOM | Gravity.END;
            fab.setLayoutParams(params);
        }

    }

Но код выдаёт Exception:
An anchor may not be changed after CoordinatorLayout measurement begins before layout is complete.


Что мне делать?Пытался обработать это событие другими способами, но не получилось.
  • Вопрос задан
  • 482 просмотра
Пригласить эксперта
Ответы на вопрос 1
TerraMorf
@TerraMorf
Java Andriod developer
Где вызывается это все?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы