5

Desidero nascondere il mio AppBarLayout per aggiungere una vista dinamicamente che occuperà l'altezza dello schermo. Per questo, voglio rimuovere temporaneamente una vista impostando la visibilità del mio AppBarLayout su GONE. La vista non è visibile, ma occupa spazio sullo schermo (metà dell'altezza dello schermo).AppBarLayout occupa spazio dopo setVisibility (View.GONE)

Il mio codice 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" /> 

voglio aggiungere immagine per mostrare il problema, ma non posso perché la mia reputazione. Scusate per l'inglese pessimo, non parlo molto bene.

risposta

3

tenta di impostare l'altezza di AppBarLayout a zero

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

E funziona, ma quando faccio questo, il mio FrameLayout non prendere match_parent per la layout_height – Okn

+0

quello che fai significa dire "non prende match_parent per layout_height"? Non si adatta allo schermo? – mohax

+0

Mi dispiace per l'inglese. Voglio che FrameLayout occupi tutta l'altezza dello schermo, ma quando imposto l'appBarLayout, FrameLayout si trova nella parte superiore dello schermo ma non in basso (come un margin_bottom ma non riesco a vedere alcun margine nel mio codice). Per semplificare, voglio Android: layout_height: "match_parent" – Okn

5

Il tuo problema è causato da questa linea

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

Si dovrà impostare programatically sulla CoordinatorLayout non il frammento contenitore reale che ha quel campo .

Ecco come

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

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

    mContainer.requestLayout(); 

Se si vuole rendere lo scorrimento di nuovo

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

Questa risposta ha funzionato per me dopo aver provato troppe soluzioni su SO. –