FloatingActionButton setVisibility()不起作用

时间:2015-06-25 09:33:40

标签: android android-support-library material-design android-design-library

我无法隐藏FloatingActionButton。这是我的代码:

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,但如果FAB位于setVisibility,则clearAnimation + CoordinatorLayout似乎不起作用。

即使我拨打fab.clearAnimation,动画仍会被触发。任何人都可以帮助我吗?

6 个答案:

答案 0 :(得分:18)

使用show和hide方法显示和隐藏“浮动操作按钮”

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

// To show the Floating Action Button
fab.show();

// To hide the Floating Action Button
fab.hide();

答案 1 :(得分:15)

If your issue is the animation, you could try invalidating the FAB Behavior. As for the visibility, you should null the anchor you have set in your 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);

答案 2 :(得分:6)

我遇到了完全相同的问题。似乎Google的Android团队不希望您在将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。如果您将其隐藏的时间超过了为其设置动画所需的时间,请考虑显示禁用状态。

答案 3 :(得分:1)

您可以禁用它,并使其变为半透明

fab.setEnabled(false);
fab.setClickable(false);
fab.setAlpha(0.3f);

答案 4 :(得分:1)

FloatingActionButton layers = (FloatingActionButton) findViewById(R.id.layers);
layers.hide();

它对我有用,setVisibilityFloatingActionButton不起作用,因为它属于另一个没有viewGroup方法的setVisibility

答案 5 :(得分:1)

对于FloatingActionButtonsetVisibility()方法在使用最新的Gradle 6.xbuild-tool 28.x.x构建时会给您一个错误,并且不再鼓励使用。 相反,请使用:

fab.hide()    // fab.setVisibility(View.GONE)
fab.show()    // fab.setVisibility(View.VISIBLE)
  

注意:在Android Studio 3.4.1Gradle 6.0和   build-tool 28.0.1