5

Я не могу скрыть свой FloatingActionButton. Вот мой код:FloatingActionButton setVisibility() не работает

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> 

И я звоню:

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

Я пытаюсь скрыть FAB, но мне кажется, что setVisibility + clearAnimation не работает если FAB находится в CoordinatorLayout.

Даже если я звоню fab.clearAnimation, анимация по-прежнему срабатывает. Может кто-нибудь мне помочь?

+1

И что такое fab ???? – Pankaj

+0

@ Clairvoyant fab - FloatingActionButton .. – user2331095

+0

попробуйте добавить fab.invalidate(), в соответствии с setVisibility. Или переключите clearAnimation и setVisibility. – Danielson

ответ

13

Если ваша проблема связана с анимацией, вы можете попробовать недействительный FAB Behavior. Что касается видимости, вы должны аннулировать якорь, который вы установили в своем макете:

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

Он работает для вас? Я попробовал, но это не работает ... FAB по-прежнему виден, и анимация все еще срабатывает ... – user2331095

+0

Что вызывает анимацию? Вы имеете в виду, что вызов setVisibility (GONE) запускает анимацию, или это просто обходной путь, который вы пытались избежать анимации? – natario

+0

Отредактировал мой ответ, чтобы удалить атрибут 'anchor'. – natario

1

Я столкнулся с точно такой же проблемой. Казалось бы, команда Android от Google не хочет, чтобы вы контролировали видимость, когда FloatingActionButton привязан к AppBarLayout, как обсуждалось в этом выпуске - FloatingActionButton Ignores View Visibility

Похоже, что реальное исправление обертывает FAB в FrameLayout и настройки видимости на обертке, а не, как это:

<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> 

однако вы можете пожелать рассмотреть это ли идеальное поведение. Адвокаты Google рекомендуют, чтобы FAB был видимым сразу после создания экрана. Если вы скрываете его дольше, чем требуется для его анимации, подумайте о том, чтобы отобразить отключенное состояние.

Смежные вопросы