5

mam CoordinatorLayout jak opisano w blogu: http://android-developers.blogspot.ru/2015/05/android-design-support-library.htmlJak programowo pokazać zwinięte elementy w CoordinatorLayout?

<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> 

Wewnątrz AppBarLayout mam Toolbar i TextView z dodatkową informacją statusu. AppBarLayout można zwinąć (po przewinięciu). Czasami muszę pokazać AppBarLayout, aby pokazać zmieniony status.

Jak to zrobić programowo?

Odpowiedz

15

Jak wspomniano w other comment:

Korzystanie z bibliotekami wsparcia V23 można nazwać appBarLayout.setExpanded(true/false)

+0

Działa to dla mnie idealny. – Jigar

+1

dlaczego nie jest to akceptowane jako odpowiedź? działa świetnie. – KunalK

2

Ze względu na answear z Tuấn Trần Anh, założony here, można użyć tych dwóch metod, aby zwinąć i wydatkować CoordinatorLayout programaticly:

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]); 
    } 
} 
0

W moim przypadku korzystania z tego rozwiązania

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); 
     } 
    } 
} 

dla siły pokaz appbarlayout. Reset przewijać widok do appbarLayout max zakresu przewijania i appBarLayout do pozycji wyjściowej = 0.

Powiązane problemy