12

AppBarLayoutTabLayoutをプログラムで表示/非表示にしたいとします。 VISIBLEGONEに設定するだけでは不十分です。変更内容をアニメートして、コンテンツが表示されている間にスペースを再利用して、タブが表示されたらスペースを残したいからです。 AppBarLayoutは、子ビューの追加/削除時に自動的にアニメーションを可能にし、任意のViewGroupサブクラスとしてプログラムで非表示のアンドロイドサポートデザインを表示するAppBarLayout内のTabLayout

<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

変更をアニメーション化するには、親AppBarLayoutにandroid:animateLayoutChanges = "true"を追加します。つまり、View.GONEで十分です。 – natario

+0

これはシームレスに機能します!ありがとう!回答として投稿できる場合は、それを受け入れることができます。 – jaibatrik

答えて

18

-

以下は、関連する私のレイアウトXMLの一部です。レイアウトファイルにandroid:animateLayoutChanges="true"(デフォルトではfalse)を追加するだけです。

ビューがなくなったときに空間コンテンツを再利用するには、setVisibility(View.INVISIBLE)ではなくsetVisibility(View.GONE)を使用する必要があります。これは、不可視ビュー用のスペースを保持するためです。

関連する問題