12

Chcę programowo ukryć/pokazać TabLayout w moim AppBarLayout. Po prostu ustawienie widoczności na VISIBLE i GONE nie wystarczy, ponieważ chcę animować zmiany i odzyskać przestrzeń wraz z moją zawartością, podczas gdy karta wycofuje się i opuszcza spację po wyświetleniu karty.Programowo ukryj/pokaż projekt wsparcia dla Androida TabLayout wewnątrz AppBarLayout

Poniżej znajduje się odpowiednia część mojego układu XML -

<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

     <android.support.design.widget.TabLayout 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:tabMode="scrollable" 
      android:layout_marginStart="42dp" 
      android:layout_marginLeft="42dp" 
      style="@style/MainTabLayout"> 

     </android.support.design.widget.TabLayout> 
    </android.support.design.widget.AppBarLayout> 
+0

Aby ożywić zmianę, po prostu dodaj android: animateLayoutChanges = "true" do nadrzędnego AppBarLayout. Powiedział, że View.GONE powinno wystarczyć. – natario

+0

To działa bezproblemowo! Dzięki! Jeśli możesz opublikować odpowiedź jako odpowiedź, będę mógł ją zaakceptować. – jaibatrik

Odpowiedz

18

Jak każdy ViewGroup podklasy, AppBarLayout pozwala na automatyczne animacje podczas dodawania/usuwania widoków podrzędnych. Musisz tylko dodać android:animateLayoutChanges="true" (domyślnie false) w swoim pliku układu.

Jeśli chodzi o odzyskiwanie zawartości kosmicznej, gdy widok zniknął, wystarczy użyć setVisibility(View.GONE) zamiast setVisibility(View.INVISIBLE), ponieważ ta ostatnia zawiera przestrzeń dla niewidocznego widoku.