Android:我们如何在xml布局中隐藏/显示浮动操作按钮(fab)

时间:2015-12-18 07:32:54

标签: android material-design floating-action-button

我的Activity中有一个浮动操作按钮。我可以使用以下方式以编程方式显示/隐藏fab按钮:

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

但是我无法在xml布局中设置这些属性。默认情况下,我无法找到任何设置隐藏在xml中。这是我的xml布局。

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:src="@drawable/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        app:layout_anchor="@id/list_view"
        app:layout_anchorGravity="bottom|right|end" />

更新:我不想将我的fab按钮可见性设置为GONE。我想在XML布局中设置hide()。我想在延迟之后在我的活动中调用fab上的show()。

4 个答案:

答案 0 :(得分:5)

在“FloatingActionButtonLollipop.java”和“FloatingActionButtonEclairMr1.java”中, show()首先检查其可见性,然后播放动画。

if (mView.getVisibility() != View.VISIBLE || mIsHiding) {
        // If the view is not visible, or is visible and currently being hidden, run
        // the show animation
        mView.clearAnimation();
        mView.setVisibility(View.VISIBLE);
        Animation anim = android.view.animation.AnimationUtils.loadAnimation(
                mView.getContext(), R.anim.design_fab_in);
        anim.setDuration(SHOW_HIDE_ANIM_DURATION);
        anim.setInterpolator(AnimationUtils.FAST_OUT_SLOW_IN_INTERPOLATOR);
        anim.setAnimationListener(new AnimationListenerAdapter() {
            @Override
            public void onAnimationEnd(Animation animation) {
                if (listener != null) {
                    listener.onShown();
                }
            }
        });
        mView.startAnimation(anim);
    } 

我认为你可以简单地将可见性设置为消失。

答案 1 :(得分:1)

简单方法是在FloatingActionButtonRelativeLayout中添加LinearLayout,并对容器布局使用GONE/VISIBLE操作。

答案 2 :(得分:0)

要让FloatingActionButton show()调用动画效果,您需要使用visibility="invisible",因此布局中按钮的视图布局

请参阅支持库中的show方法的实现:

void show(@Nullable final InternalVisibilityChangedListener listener, final boolean fromUser) {
        if (isOrWillBeShown()) {
            // We either are or will soon be visible, skip the call
            return;
        }

        mView.animate().cancel();

        if (shouldAnimateVisibilityChange()) {
            mAnimState = ANIM_STATE_SHOWING;
...

和方法

private boolean shouldAnimateVisibilityChange() {
    return ViewCompat.isLaidOut(mView) && !mView.isInEditMode();
}

答案 3 :(得分:0)

  android:visibility="invisible"

我在xml上进行了尝试,简称为fab.show(),它可以与我设备中的动画配合使用。 (Andoird 5.1.1)