12

Ich möchte das TabLayout in meinem AppBarLayout programmatisch verstecken/zeigen. Das Einstellen der Sichtbarkeit auf VISIBLE und GONE reicht nicht aus, da ich die Änderungen animieren und den Speicherplatz mit meinem Inhalt zurückerlangen möchte, während der Tab sich zurückzieht und den Platz freigibt, sobald der Tab wieder angezeigt wird.Programmatisch verstecken/zeigen Android Support-Design TabLayout innerhalb AppBarLayout

Unten ist der relevante Teil meiner Layout 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> 
+0

Um die Änderung zu animieren, fügen Sie einfach android: animateLayoutChanges = "true" zum übergeordneten AppBarLayout hinzu. Das heißt, View.GONE sollte ausreichen. – natario

+0

Das funktioniert nahtlos! Vielen Dank! Wenn du es als Antwort posten kannst, kann ich es akzeptieren. – jaibatrik

Antwort

18

Wie jeder ViewGroup Unterklasse ermöglicht AppBarLayout für die automatische Animationen während der das Hinzufügen/Entfernen von Kinderblick. Sie müssen nur android:animateLayoutChanges="true" (standardmäßig false) in Ihrer Layoutdatei hinzufügen.

Um den Inhalt des Space zurückzugewinnen, wenn die Ansicht verschwunden ist, müssen Sie nur setVisibility(View.GONE) statt setVisibility(View.INVISIBLE) verwenden, da letzterer den Platz für die unsichtbare Ansicht enthält.