Как программно отобразить свернутые элементы в CoordinatorLayout?

У меня CoordinatorLayout, как описано в блоге: http://android-developers.blogspot.ru/2015/05/android-design-support-library.html

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

  <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

  <android.support.design.widget.AppBarLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content">
     <android.support.v7.widget.Toolbar
              ...
              app:layout_scrollFlags="scroll|enterAlways">

     <TextView
              ...
              app:layout_scrollFlags="scroll|enterAlways">
   </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

Внутри AppBarLayout есть Toolbar и TextView с дополнительной информацией о статусе. AppBarLayout можно свернуть (после прокрутки). Иногда мне нужно показать AppBarLayout, чтобы показать измененный статус.

Как это сделать программно?




Ответы (3)


Как упоминалось в другом комментарии:

Используя библиотеки поддержки v23, вы можете вызвать appBarLayout.setExpanded(true/false)

person Mario Velasco    schedule 04.12.2015
comment
почему это не принято в качестве ответа? работает отлично. - person KunalK; 10.08.2016

Из-за ответа от Tuấn Trần Anh, основателя здесь, вы можете использовать эти два метода для свертывания и расходования CoordinatorLayout программно:

public void collapseToolbar(){
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
    behavior = (AppBarLayout.Behavior) params.getBehavior();
    if(behavior!=null) {
        behavior.onNestedFling(rootLayout, appbarLayout, null, 0, 10000, true);
    }
}

public void expandToolbar(){
    CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appbarLayout.getLayoutParams();
    behavior = (AppBarLayout.Behavior) params.getBehavior();
    if(behavior!=null) {
        behavior.setTopAndBottomOffset(0);
        behavior.onNestedPreScroll(rootLayout, appbarLayout, null, 0, 1, new int[2]);
    }
}
person Anton A.    schedule 28.06.2015

В моем случае я использую это решение

 public void resetAppBarLayout() {
    if (mContentContainer != null) {
        final AppBarLayout.ScrollingViewBehavior container_behavior = ((AppBarLayout.ScrollingViewBehavior)
                ((CoordinatorLayout.LayoutParams) mContentContainer.getLayoutParams()).getBehavior());
        if (container_behavior != null) {
            container_behavior.setTopAndBottomOffset(appBarLayout.getTotalScrollRange());
        }
        final AppBarLayout.Behavior appbar_behavior = ((AppBarLayout.Behavior)
                ((CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams()).getBehavior());
        if (appbar_behavior != null) {
            appbar_behavior.setTopAndBottomOffset(0);
        }
    }
}

для принудительного отображения appbarlayout. Сбросить прокрученный вид до максимального диапазона прокрутки appbarLayout и appBarLayout до начальной позиции = 0.

person jobpav1984    schedule 17.07.2015