Я работаю над сокрытием Toolbar
в своем приложении, в настоящее время использую его в AppBarLayout
. Toolbar
перемещается / скрывается правильно, но у меня также есть проблема с моим пользовательским представлением, которое также скользит, но не должно оставаться в нижней части родительского элемента (FrameLayout
, layout_gravity="bottom"
для дочернего элемента).
Для манипулирования дном я использую OnOffsetChangedListener
и поля, как показано ниже:
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
boolean scrollFlagsSet = ((AppBarLayout.LayoutParams) getToolbar().getLayoutParams()).
getScrollFlags() != 0;
int bottom = (!scrollFlagsSet ? 0 : getToolbarHeight()) + verticalOffset;
ViewGroup.MarginLayoutParams layoutParams =
(ViewGroup.MarginLayoutParams) customView.getLayoutParams();
layoutParams.setMargins(layoutParams.leftMargin, layoutParams.topMargin,
layoutParams.rightMargin, layoutParams.topMargin + bottom);//top margin same as bottom initially
customView.requestLayout();
Log.(TAG,"calculated bottom: " + bottom);
}
На Android 8.1 все работает хорошо (только при вызове requestLayout()
), мой customView
остается на своем месте, но я протестировал этот фрагмент на HTC с 4.1 (да, все еще поддерживаю ...) и похоже это поле настройки происходит только один раз (первый?). View
все еще скользит с вложенной прокруткой, он перемещается только немного для начального bottom
параметр / расстояние ... Log
все еще вызывается с каждым изменением смещения. Почему и как это предотвратить?
Я пробовал с invalidate();
, forceLayout();
, requestLayout();
и setLayoutParams(layoutParams);
для того же вида, но без удачи
Эскиз конструкции (макет для фрагмента):
<FrameLayout>
<SwipeRefreshLayout>
<NestedWebView/>
</SwipeRefreshLayout>
<CustomView/>
</FrameLayout>