У меня есть 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.
Что мне делать?Пытался обработать это событие другими способами, но не получилось.