web-dev-qa-db-ja.com

プログラムで非表示/表示Android AppBarLayout内のデザインTabLayoutをサポート

TabLayoutAppBarLayoutをプログラムで非表示/表示したい。可視性をVISIBLEGONEに設定するだけでは不十分です。タブが後退している間に変更をアニメーション化し、コンテンツでスペースを再利用し、タブが表示されたらスペースを残したいからです。

以下は私のレイアウト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
jaibatrik

他のViewGroupサブクラスと同様に、AppBarLayoutでは、子ビューの追加/削除中に自動アニメーションを使用できます。レイアウトファイルに_Android:animateLayoutChanges="true"_(デフォルトはfalse)を追加するだけです。

ビューがなくなったときにスペースコンテンツを再利用する場合は、setVisibility(View.GONE)ではなくsetVisibility(View.INVISIBLE)を使用するだけです。後者は、非表示のビューのスペースを保持するためです。

20
natario