Программно скрыть/показать дизайн поддержки Android TabLayout внутри AppBarLayout

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

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

Ответ 1

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

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