6

natknąłem się na dziwny problem z nowym Androidem planowania wsparcia librar (http://android-developers.blogspot.com.ar/2015/05/android-design-support-library.html). Jeśli umieszczę dodatkową zawartość (np. LinearLayout) w AppBarLayout razem z Paskiem narzędzi i przełączę widoczność tej treści, to fragmenty przełączania będą pokazywały martwą przestrzeń u góry zawartości fragmentu.przełączając widoki widoczność AppBarLayout powoduje problemy odstępów dla załadowanych Fragmenty

Wygląda na to, że AppBarLayout nie zmienia prawidłowo rozmiaru nadrzędnego elementu CoordinatorLayout, gdy widoczność treści jest przełączana. Mam moje CoordinatorLayout zapakowane w DrawerLayout. Chcę przełączać widoczność dodatkowego LinearLayout w AppBarLayout w zależności od pokazanego fragmentu.

Oto mój plik main.xml za główną działalność:

<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

Jest to problem związany z biblioteką wsparcia projektu. Zostało zgłoszone i oznaczone jako przyszłe wydanie, przepraszam, nie mogłem znaleźć linku do problemu. – Aashir

+0

Musi istnieć sposób na wymuszenie przerysowania. Po obróceniu widoku odstępy są stałe. Brzmi jak warunek wyścigu. A może jest możliwe przeniesienie AppBarLayout do Fragmentu, aby uniknąć problemu. Chciałbym zobaczyć oryginalny raport o błędzie, aby sprawdzić, czy oferuje on poprawkę. – ThanksMister

+0

Możliwym rozwiązaniem, które wydaje się działać, jest dodanie wszystkiego do elementu CoordinatorLayout do Fragmentu i dodanie/usunięcie zawartości z AppBarLayout zgodnie z wymaganiami dla każdego Fragmentu. Aby dodać menu hamburgera, dodać pozycje menu lub zaktualizować tytuł, musisz uzyskać odnośnik do paska narzędzi. – ThanksMister

Odpowiedz

1

Miałem podobny problem przy użyciu widżet projekt wsparcia. Miałem CoordinatorLayout wewnątrz DrawerLayout i AppBarLayout wewnątrz CoordinatorLayout. Miałem dwa paski narzędzi wewnątrz AppBarLayout. Moim celem było wyświetlenie paska narzędzi z ViewPagerem wyświetlającym zawartość z recyklingu. Podczas wybierania elementów chciałem przeskakiwać między paskami narzędzi. Innymi słowy, zrobiłem jeden pasek narzędzi GONE, podczas gdy drugi był widoczny i vice versa. Przewijanie zawartości spowoduje przesunięcie paska narzędzi z góry ekranu. Wszystko działało idealnie, ale zmiana orientacji wskazywałaby miejsce na pasek narzędzi, który powinien zniknąć. Próbowałem każdego hacka, o którym mogłem pomyśleć, żeby się go pozbyć, ale się nie udało. Natknąłem się na ten post i zdałem sobie sprawę, że to błąd w bibliotece wsparcia. Następnie próbowałem umieścić FrameLayout w AppBarLayout, a następnie umieścić dwa paski narzędzi wewnątrz FrameLayout i NO MORE SPACE! wszystko działa teraz tak, jak zamierzam. Na pasku narzędzi GONE są GONE i widoczny jest tylko widoczny pasek narzędzi, nawet przy zmianie orientacji.

Mam nadzieję, że to komuś pomaga.