6

ich ein seltsames Problem mit dem neuen Android Design Support Librar angetroffen (http://android-developers.blogspot.com.ar/2015/05/android-design-support-library.html). Wenn ich zusätzlichen Inhalt (z. B. ein LinearLayout) in einem AppBarLayout zusammen mit der ToolBar platziere und die Sichtbarkeit dieses Inhalts umschalte, wird beim Umschalten von Fragmenten oben im Fragment-Inhalt ein Totraum angezeigt.Makel Sichtbarkeit AppBarLayout Ansichten verursachen Abstand Ausgaben für geladene Fragmente

Es scheint, dass AppBarLayout die übergeordnete CoordinatorLayout nicht korrekt ändert, wenn die Sichtbarkeit des Inhalts umgeschaltet wird. Ich habe mein CoordinatorLayout in das DrawerLayout eingepackt. Ich möchte die Sichtbarkeit des zusätzlichen LinearLayouts im AppBarLayout abhängig vom angezeigten Fragment ändern.

Hier ist meine main.xml-Datei für die MainActivity:

<android.support.v4.widget.DrawerLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true"> 

<android.support.design.widget.CoordinatorLayout 
      android:layout_height="match_parent" 
      android:layout_width="match_parent"> 

     <android.support.design.widget.AppBarLayout 
       android:id="@+id/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="?attr/actionBarSize"/> 

      <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" 
        android:gravity="center_vertical""> 

       <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:gravity="start" 
         android:text="Hello"/> 
      </LinearLayout> 

     </android.support.design.widget.AppBarLayout> 

     <FrameLayout 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       android:id="@+id/content_frame" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"/> 

    </android.support.design.widget.CoordinatorLayout> 

    <android.support.design.widget.NavigationView 
      android:id="@+id/navigation" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      app:menu="@menu/drawer"/> 

</android.support.v4.widget.DrawerLayout> 
+1

Dies ist ein Problem mit der Design-Support-Bibliothek. Es wurde gemeldet und markiert als eine zukünftige Version, sorry, ich konnte den Link zu dem Problem nicht finden – Aashir

+0

Es muss eine Möglichkeit geben, eine Neuzeichnung zu erzwingen. Wenn Sie die Ansicht drehen, ist der Abstand festgelegt. Klingt nach einer Wettlaufbedingung. Vielleicht ist es auch möglich, das AppBarLayout in das Fragment zu verschieben, um das Problem zu vermeiden. Ich möchte den ursprünglichen Fehlerbericht sehen, um zu sehen, ob er eine Fehlerbehebung bietet. – ThanksMister

+0

Eine mögliche Lösung, die zu funktionieren scheint, ist das Hinzufügen von allem im CoordinatorLayout zum Fragment und das Hinzufügen/Entfernen von Inhalt aus dem AppBarLayout, wie für jedes Fragment erforderlich. Sie müssen einen Verweis auf die Symbolleiste erstellen, um das Hamburgermenü hinzuzufügen, Menüelemente hinzuzufügen oder den Titel zu aktualisieren. – ThanksMister

Antwort

1

Ich hatte ein ähnliches Problem, das die Unterstützung Design-Widget verwenden. Ich hatte ein CoordinatorLayout in einem DrawerLayout und ein AppBarLayout im CoordinatorLayout. Ich hatte zwei Symbolleisten in der AppBarLayout. Mein Ziel war es, eine Symbolleiste mit einem ViewPager anzuzeigen, der einen Recyclerview-Inhalt anzeigt. Ich wollte bei der Auswahl von Elementen zwischen den Symbolleisten wechseln. Mit anderen Worten, ich habe eine Symbolleiste GONE gemacht, während die andere sichtbar war und umgekehrt. Wenn Sie den Inhalt nach oben scrollen, wird die Symbolleiste am oberen Bildschirmrand angezeigt. Alles funktionierte perfekt, außer dass die wechselnde Ausrichtung einen Platz für die Symbolleiste hätte, die weg sein sollte. Ich habe jeden möglichen Hack ausprobiert, um ihn loszuwerden, aber es ist mir nicht gelungen. Ich bin dann auf diesen Beitrag gestoßen und habe festgestellt, dass es sich um einen Fehler in der Support-Bibliothek handelt. Ich habe dann versucht, ein FrameLayout in das AppBarLayout zu setzen und dann die beiden Symbolleisten in das FrameLayout und NO MORE SPACE zu setzen! Alles funktioniert jetzt so, wie ich es vorhabe. GONE-Symbolleisten sind GONE und nur die sichtbare Symbolleiste wird angezeigt, auch wenn die Ausrichtung geändert wird.

Ich hoffe, das hilft jemandem.