2016-07-12 48 views
5

Ho un foglio inferiore con all'interno NestedScrollView (vedi sotto). Quando premo un pulsante FAB, voglio rendere invisibili alcune parti in questo NestedScrollView. Ma quando cambio alcune visioni di linearlayouts su GONE, il foglio di fondo vola via dalla cima. Vedi qui:BottomSheet vola via con cambio di visibilità

enter image description here

È possibile ottenere l'intero codice da https://github.com/Tanrikut/BottomSheetExample

mio metodo cambiamento visibilità:

private void changeVisibility() { 
    subtitleLayout.setVisibility(View.GONE); 

    coordinateLayout.setVisibility(View.GONE); 
    timeLayout.setVisibility(View.GONE); 

} 

mio NestedScrollView xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView 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:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:behavior_peekHeight="120dp" 
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior" 
    android:id="@+id/bottom_sheet_main"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="28dp" 
      android:background="@android:color/white" 
      android:animateLayoutChanges="true" 
      android:orientation="vertical" 
      > 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:paddingLeft="10dp" 
       android:paddingStart="10dp" 
       android:paddingTop="@dimen/activity_horizontal_margin"> 

       <TextView 
        style="@style/TextAppearance.AppCompat.Headline" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Dandelion Chocolate" 
        android:id="@+id/title" /> 
       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="@dimen/activity_horizontal_margin" 
        android:layout_marginTop="16dp" 
        android:orientation="horizontal" 
        android:id="@+id/subtitleLayout"> 

        <TextView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:id="@+id/subtitle" 
         android:text="Subtitle" /> 

       </LinearLayout> 


      </LinearLayout> 


      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:padding="@dimen/activity_horizontal_margin" 
       android:id="@+id/coordinateLayout"> 

       <ImageButton 
        android:layout_width="24dp" 
        android:layout_height="24dp" 
        android:alpha="0.36" 
        android:src="@drawable/ic_room_24dp" 
        android:background="@null" /> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="@dimen/activity_horizontal_margin" 
        android:layout_marginStart="@dimen/activity_horizontal_margin" 
        android:text="740, Valencia St, San Francisco, CA" 
        android:textColor="@android:color/primary_text_light" 
        android:id="@+id/bottom_sheet_coordinate" /> 

      </LinearLayout> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:padding="@dimen/activity_horizontal_margin" 
       android:id="@+id/timeLayout"> 

       <ImageButton 
        android:layout_width="24dp" 
        android:layout_height="24dp" 
        android:alpha="0.36" 
        android:src="@drawable/ic_query_builder_24dp" 
        android:background="@null" /> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginLeft="@dimen/activity_horizontal_margin" 
        android:layout_marginStart="@dimen/activity_horizontal_margin" 
        android:text="Wed, 10 AM - 9 PM" 
        android:textColor="@android:color/primary_text_light" 
        android:id="@+id/bottom_sheet_time" /> 

      </LinearLayout> 


     </LinearLayout> 

    </FrameLayout> 
</android.support.v4.widget.NestedScrollView> 
+0

dove chiami changeVisibility()? – Lawrance

+0

All'interno di un clicklistener di un pulsante fab – Tanrikut

risposta

0

Può essere questo posso aiutarti! Non posso commentare in modo distacco come una risposta

Here

for slide layout something same as bottom sheet but good

+0

Non sono chiaro su cosa suggerisci. Suggerite di avere più fogli di fondo invece di modificare la visibilità all'interno di un foglio inferiore? – Tanrikut

+0

ma è stato suggerito un modo per codificare i fogli inferiori, invece è possibile utilizzare il layout scorrevole vedere la mia risposta modificata perché i fogli inferiori non sono così buoni da usare (come per il mio punto di vista lol) –

0

BottomSheetBehavior avere il suo comportamento con il quale è possibile ottenere rispettivo risultato. Di seguito sono riportati i comportamenti di Bottom.

STATE_DRAGGING, STATE_SETTLING, STATE_EXPANDED, STATE_COLLAPSED, STATE_HIDDEN.

Non utilizzare la visibilità di alcun layout.

Utilizzare questo comportamento nel codice come:

fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       int behaviorState = bottomSheetBehavior.getState(); 
       if (behaviorState == BottomSheetBehavior.STATE_EXPANDED) { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); 
       } else { 
        bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); 
       } 
      } 
}); 
+0

non sto cercando di cambiare la visibilità di foglio di sotto. Sto cercando di cambiare ciò che è visibile all'interno di quel foglio inferiore. – Tanrikut

7

mi sono imbattuto in questo, ha preso un po 'per capire quale fosse la causa.

È perché si sta utilizzando android: animateLayoutChanges, che emerge da un bug in BottomSheetBehavior o CoordinatorLayout.

Rimuovere e il BottomSheet smetterà di animare da solo quando non dovrebbe. Non una soluzione, ma almeno una soluzione.

-

Aggiornamento:

scopre che se si attiva "animateLayoutChanges" a livello di codice impostando l'istanza LayoutTransition da utilizzare, è possibile impostare un flag su di esso che gli impedirà di fare scherzi con una vista che sono gli antenati di quello che si sta utilizzando Android: animateLayoutChanges su (aka: il vostro contenitore BottomSheet): metodo

LayoutTransition transition = new LayoutTransition(); 
transition.setAnimateParentHierarchy(false); 
yourLinearLayoutThatNeedsLayoutAnimation.setLayoutTransition(transition); 
+0

Questo ha funzionato per me –

+0

Questo è esattamente ciò che risolve il problema! - grazie! questo problema è ancora presente nella versione attuale del supporto lib v25.0.1 – koesclem