Сворачивающийся макет панели инструментов расширяется при нажатии, а не при прокрутке

У меня есть простая панель инструментов с информационным значком справа. При нажатии на элемент я хотел бы расширить панель инструментов с анимацией. С новым видом и кнопкой FAB. Как это делает Textra SMS.

При нажатии за пределами расширенной панели инструментов я хочу свернуть панель инструментов.

Я смотрю, как я могу справиться с этим с помощью CollapsingToolbarLayout? Является ли это возможным? Все примеры, которые я нахожу в Интернете, сворачиваются/расширяются при прокрутке представления (Recyclerview, Scrollview и т. д.). Но я не хочу, чтобы моя панель инструментов перемещалась при прокрутке моего представления.

Это хороший способ использовать CollapsingToolbarLayout? или нужно все делать самому?


person Chol    schedule 07.01.2016    source источник


Ответы (1)


CollapsingToolbarLayout кажется совершенно подходящим для этой цели (и я действительно считаю, что ваш макет будет выглядеть намного лучше, чем в приложении Textra SMS).

Вам понадобится несколько вещей:

  1. Способ отключить CollapsingToolbarLayout. На мой взгляд, лучший способ (по крайней мере, лучший, который я нашел до сих пор) — использовать пользовательский CoordinatorLayout вместо обычного CoordinatorLayout.

    public class DisableableCoordinatorLayout extends CoordinatorLayout {
        private boolean mPassScrolling = true;
    
        public DisableableCoordinatorLayout(Context context) {
            super(context);
        }
    
        public DisableableCoordinatorLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public DisableableCoordinatorLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
            return mPassScrolling && super.onStartNestedScroll(child, target, nestedScrollAxes);
        }
    
        public void setPassScrolling(boolean passScrolling) {
            mPassScrolling = passScrolling;
        }
    }
    
  2. Вам нужно фактически отключить CollapsingToolbarLayout (вы больше не хотите, чтобы ваш CollapsingToolbarLayout реагировал на прокрутки):

    mDisableableCoordinatorLayout.setPassScrolling(false);
    
  3. Вам нужно использовать AppBarLayout, чтобы развернуть элемент CollapsingToolbarLayout onOptionsMenu.

    mAppBarLayout.setExpanded(true, true);
    
  4. Вам также нужно использовать AppBarLayout, чтобы свернуть CollapsingToolbarLayout при щелчке снаружи (реализуйте щелчок снаружи любым удобным для вас способом)

    mAppBarLayout.setExpanded(false, true);
    
person Bartek Lipinski    schedule 07.01.2016