5

Chcę ukryć mój AppBarLayout, aby dynamicznie dodawać widok, który zajmie wysokość ekranu. W tym celu chcę usunąć widok tymczasowo, ustawiając widoczność mojego AppBarLayout na GONE. Widok jest niewidoczny, ale zajmuje miejsce na ekranie (połowa wysokości ekranu).AppBarLayout zajmuje miejsce po setVisibility (View.GONE)

Mój kod XML:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/coordinatorFriendProfil" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="#81D4FA" 
android:fitsSystemWindows="true"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/fProfilAppBar" 
    android:layout_width="match_parent" 
    android:layout_height="250dp" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/fProfilCollapsing" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#B3E5FC" 
     android:gravity="center" 
     android:orientation="vertical" 
     app:contentScrim="#03A9F4" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <LinearLayout 
      android:id="@+id/fProfilUserInfo" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center" 
      android:orientation="vertical"> 

      <com.neden.neden.RoundedImageView 
       android:id="@+id/ivFriendPicture" 
       android:layout_width="150sp" 
       android:layout_height="150sp" 
       android:layout_gravity="center" 
       android:fitsSystemWindows="true" 
       android:src="@drawable/photo" 
       app:border_color="#64B5F6" 
       app:border_width="4dp" 
       app:layout_collapseMode="parallax" 
       app:layout_collapseParallaxMultiplier="0.7" /> 

      <TextView 
       android:id="@+id/fProfilName" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:textSize="15pt" /> 

     </LinearLayout> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/fProfilToolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:layout_scrollFlags="scroll|enterAlways" /> 

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

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

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

Chcę dodać zdjęcie do pokazania problemu, ale nie mogę z powodu mojej reputacji. Przepraszamy za bardzo zły angielski, nie mówię bardzo dobrze.

Odpowiedz

3

spróbuj ustawić wysokość AppBarLayout do zera

AppBarLayout appBar=(AppBarLayout)findViewById(R.id.fProfilAppBar); 
LinearLayout.LayoutParams params=appBar.getLayoutParams(); 
params.height=0; 
appBar.setLayoutParams(params); 
+0

To działa, ale kiedy to zrobić, mój FrameLayout nie bierze match_parent dla layout_height – Okn

+0

Co ty chodzi o powiedzenie "nie bierze match_parent dla" layout_height "? To nie pasuje do ekranu? – mohax

+0

Przykro mi z powodu angielskiego. Chcę, aby FrameLayout zajmował całą wysokość ekranu, ale kiedy ustawiam appBarLayout, FrameLayout jest na górze ekranu, ale nie na dole (jak margin_bottom, ale nie widzę żadnego marginesu w moim kodzie). Dla uproszczenia chcę android: layout_height: "match_parent" – Okn

5

Twój problem jest spowodowany przez tę linię

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

trzeba będzie ustawić go programowo na CoordinatorLayout nie rzeczywistego fragmentu pojemnika, który ma tego pola .

Oto jak

mContainer = (FrameLayout) findViewById(R.id.main_content_container); 

    CoordinatorLayout.LayoutParams params = 
      (CoordinatorLayout.LayoutParams) mContainer.getLayoutParams(); 
    params.setBehavior(null); 

    mContainer.requestLayout(); 

Jeśli chcesz, aby to przewijanie ponownie

params.setBehavior(new AppBarLayout.ScrollingViewBehavior()); 
+0

Ta odpowiedź działała dla mnie po wypróbowaniu zbyt wielu rozwiązań na SO. –

Powiązane problemy