题 以编程方式隐藏/显示AppBarLayout中的android支持设计TabLayout


我想以编程方式隐藏/显示 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>

12
2017-09-13 13:21


起源


要为更改设置动画,只需将android:animateLayoutChanges =“true”添加到父AppBarLayout即可。也就是说,View.GONE应该足够了。 - natario
这无缝地工作!谢谢!如果您可以将其作为答案发布,我将能够接受它。 - jaibatrik


答案:


任何 ViewGroup 子类, AppBarLayout 允许在添加/删除子视图期间自动动画。你只需要添加 android:animateLayoutChanges="true" (默认为 false)在您的布局文件中。

至于在视图消失时回收空间内容,您所要做的就是使用 setVisibility(View.GONE) 而不是 setVisibility(View.INVISIBLE)因为后者为不可见的视图保留了空间。


19
2017-09-13 15:35