以编程方式隐藏/显示 android 支持在 AppBarLayout 内设计 TabLayout

Programmatically hide / show android support design TabLayout inside AppBarLayout

我想以编程方式隐藏/显示我的 AppBarLayout 中的 TabLayout。仅将可见性设置为 VISIBLEGONE 是不够的,因为我想为更改设置动画并用我的内容回收 space,同时选项卡撤回并离开 space 一次选项卡显示回来。

下面是我布局的相关部分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>

与任何 ViewGroup 子类一样,AppBarLayout 允许在 adding/removal 子视图期间使用自动动画。您只需要在布局文件中添加 android:animateLayoutChanges="true"(默认为 false)。

至于在视图消失时回收space内容,您只需使用setVisibility(View.GONE)而不是setVisibility(View.INVISIBLE),因为后者持有space ] 为不可见的视图。