12

Я хочу программно скрыть/показать TabLayout в моем AppBarLayout. Просто установить видимость на VISIBLE и GONE не достаточно, так как я хочу анимировать изменения и вернуть пространство с моим контентом, когда вкладка отступает и покидает пространство после отображения вкладки.Программно скрыть/показать поддержку поддержки Android TabLayout внутри AppBarLayout

Ниже соответствующая часть моего макета 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

Чтобы оживить изменение, просто добавьте android: animateLayoutChanges = "true" в родительский AppBarLayout. Тем не менее, View.GONE должно быть достаточно. – natario

+0

Это работает без проблем! Благодаря! Если бы вы могли опубликовать его в качестве ответа, я смогу принять его. – jaibatrik

ответ

18

В любом ViewGroup подклассе AppBarLayout позволяет автоматически анимации во время добавления/удаления взглядов ребенка. Вам просто нужно добавить android:animateLayoutChanges="true" (по умолчанию false) в ваш файл макета.

Что касается исправления содержимого пространства, когда представление ушло, все, что вам нужно сделать, это использовать setVisibility(View.GONE), а не setVisibility(View.INVISIBLE), потому что последний содержит пространство для невидимого вида.

Смежные вопросы