5

Non riesco a nascondere il mio FloatingActionButton. Qui è il mio codice:FloatingActionButton setVisibility() non funziona

XML:

<CoordinatorLayout> 

    <AppBarLayout android:id="@+id/appbar"> 

     <CollapsingToolbarLayout> 

      <ImageView/> 

      <android.support.v7.widget.Toolbar /> 

     </CollapsingToolbarLayout> 

    </AppBarLayout> 

    <NestedScrollView /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     app:layout_anchor="@id/appbar" 
     app:layout_anchorGravity="bottom|right|end"/> 

</CoordinatorLayout> 

E sto chiamando:

fab.clearAnimation(); 
fab.setVisibility(View.GONE); 

sto cercando di nascondere la FAB, ma sembra che setVisibility + clearAnimation non funziona se il FAB è in un CoordinatorLayout.

Anche se chiamo fab.clearAnimation, l'animazione è ancora attivata. Qualcuno può aiutarmi?

+1

E cosa è fab ???? – Pankaj

+0

@Clairvoyant fab è FloatingActionButton .. – user2331095

+0

prova ad aggiungere fab.invalidate(), sotto setVisibility. Oppure cambia clearAnimation e setVisibility. – Danielson

risposta

13

Se il problema è l'animazione, è possibile provare a invalidare il FAB Behavior. Per quanto riguarda la visibilità, si dovrebbe nullo l'ancora è stata impostata nel layout:

CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); 
p.setBehavior(null); //should disable default animations 
p.setAnchorId(View.NO_ID); //should let you set visibility 
fab.setLayoutParams(p); 
fab.setVisibility(View.GONE); // View.INVISIBLE might also be worth trying 


//to bring things back to normal state 
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams(); 
p.setBehavior(new FloatingActionButton.Behavior()); 
p.setAnchorId(R.id.appbar); 
fab.setLayoutParams(p); 
+0

Funziona per voi? L'ho provato, ma non funziona ... Il FAB è ancora visibile e l'animazione si attiva ancora ... – user2331095

+0

Che cosa sta provocando l'animazione? Vuoi dire che chiamare setVisibility (GONE) sta causando un'animazione, o è solo una soluzione che hai cercato di evitare l'animazione? – natario

+0

Modificata la mia risposta per rimuovere anche l'attributo 'anchor'. – natario

1

Ho incontrato esattamente lo stesso problema. Sembrerebbe che il team Android di Google non desideri avere il controllo della visibilità quando FloatingActionButton è ancorato a un AppBarLayout, come discusso in questo numero - FloatingActionButton Ignores View Visibility

Sembra che una soluzione valida sia il wrapping del FAB in un FrameLayout e impostazione della visibilità su un involucro, invece, in questo modo:

<android.support.design.widget.FrameLayout 
    android:id="@+id/fab_container" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:visibility="invisible"> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/fab_icon"/> 

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

si può tuttavia prendere in considerazione se questo è il comportamento ideale. I sostenitori di Google raccomandano che la FAB sia visibile non appena viene creata la schermata. Se lo stai nascondendo più a lungo del necessario per animarlo, considera invece di mostrare uno stato disabilitato.

Problemi correlati