Android FloatingActionButton控件

1. FloatingActionButton类

FloatingActionButton是5.0版本出现的控件,显示一个圆形悬浮按钮。需要添加Design依赖库,并且使用Theme.AppCompat主题。

2. FloatingActionButton配置

FloatingActionButton的配置

属性说明
android:src显示的图标,最好是24dp的
app:backgroundTint正常的背景颜色
app:rippleColor按下时的背景颜色
app:elevation正常的阴影大小(默认6dp)
app:pressedTranslationZ按下时的阴影大小(默认12dp)
app:borderWidth边框宽度
app:layout_anchor设置FAB的锚点,即以哪个控件为参照设置位置
app:layout_anchorGravityFAB相对于锚点的位置
app:fabSizenormal或mini(对应56dp和40dp)

配置文件

<android.support.design.widget.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|bottom"
    android:layout_margin="20dp" 
    android:src="@drawable/icon_qq"
    app:rippleColor="#ffe5e5e5"
    app:backgroundTint="#ffffffff"
    app:elevation="6dp"
    app:pressedTranslationZ="6dp"
    app:fabSize="mini"
    app:borderWidth="0dp"/>

效果如下
这里写图片描述

3. Snackbar交互

FloatingActionButton如果没有与Snackbar关联,容易被Snackbar覆盖。
在这里插入图片描述
设置FloatingActionButtonCoordinatorLayout内部,同时将这个CoordinatorLayout作为View参数传给Snackbarmake()方法。
在这里插入图片描述
查看了一下Snackbar的源码,如果父视图是CoordinatorLayout,创建Snackbar的时候,会设置LayoutParamsinsetEdge属性。

final void showView() {
    if (mView.getParent() == null) {
        final ViewGroup.LayoutParams lp = mView.getLayoutParams();
        if (lp instanceof CoordinatorLayout.LayoutParams) {
            // If our LayoutParams are from a CoordinatorLayout, we'll setup our Behavior
            final CoordinatorLayout.LayoutParams clp = (CoordinatorLayout.LayoutParams) lp;

            final Behavior behavior = new Behavior();
            behavior.setStartAlphaSwipeDistance(0.1f);
            behavior.setEndAlphaSwipeDistance(0.6f);
            behavior.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_START_TO_END);
            behavior.setListener(new SwipeDismissBehavior.OnDismissListener() {
                @Override
                public void onDismiss(View view) {
                    view.setVisibility(View.GONE);
                    dispatchDismiss(BaseCallback.DISMISS_EVENT_SWIPE);
                }

                @Override
                public void onDragStateChanged(int state) {
                    switch (state) {
                        case SwipeDismissBehavior.STATE_DRAGGING:
                        case SwipeDismissBehavior.STATE_SETTLING:
                            // If the view is being dragged or settling, pause the timeout
                            SnackbarManager.getInstance().pauseTimeout(mManagerCallback);
                            break;
                        case SwipeDismissBehavior.STATE_IDLE:
                            // If the view has been released and is idle, restore the timeout
                            SnackbarManager.getInstance()
                                    .restoreTimeoutIfPaused(mManagerCallback);
                            break;
                    }
                }
            });
            clp.setBehavior(behavior);
            // Also set the inset edge so that views can dodge the bar correctly
            clp.insetEdge = Gravity.BOTTOM;
        }

        mTargetParent.addView(mView);
    }

    ... ...
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值