Поля не обновляются на Android 4 - PullRequest
0 голосов
/ 03 сентября 2018

Я работаю над сокрытием 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>
...