前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android材料设计之FloatingActionButton+Snackbar+SheetX3

Android材料设计之FloatingActionButton+Snackbar+SheetX3

作者头像
张风捷特烈
发布2018-12-19 14:55:34
8680
发布2018-12-19 14:55:34
举报
本文把几个小东西讲一下

FloatingActionButton:浮动按钮 Snackbar:底弹框 BottomSheet:底抽屉 BottomSheetDialog :抽屉对话框 BottomSheetDialogFragment:抽屉对话框Fragment


一、FloatingActionButton
1.基本认知

问:FloatingActionButton何许人也? --- 答:View国 ImageView 人氏

FloatingActionButton.png


2.常用属性

fab的属性.png

代码语言:javascript
复制
 颜色   android:backgroundTint="@color/jietelan" 
 图片   android:src="@drawable/icon_t"
 厚度   app:borderWidth="@dimen/dp_4"
 阴影   app:elevation="@dimen/dp_8"
 尺寸   app:fabSize="normal"
 位置   android:layout_gravity="bottom|end"
 点击深度 app:pressedTranslationZ="@dimen/dp_16"
 点击颜色 app:rippleColor="@color/yase"/>
 挂接view app:layout_anchor="@id/id_tv_moving"
3.使用:AppBarLayout+CoordinatorLayout篇的布局展示一下挂接

fab的挂接.gif


二、Snackbar和FloatingActionButton联动

Snackbar感觉就像下面出来的Toast,只是可以交互而已

fab_sna.gif

1.代码实现:
代码语言:javascript
复制
public class FabSnaActivity extends AppCompatActivity {
    @BindView(R.id.fab)
    FloatingActionButton mFab;
    @BindView(R.id.cl_root)
    CoordinatorLayout mClRoot;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_snackbar);
        ButterKnife.bind(this);
        mFab.setOnClickListener(v -> {
            Snackbar.make(mClRoot, "Hello Snack", Snackbar.LENGTH_LONG)
                    .setAction("Toast", v1 -> {
                        Toast.makeText(this, "Hi , I'm toly", Toast.LENGTH_SHORT).show();
                    }).show();
        });
    }
}
2.布局
代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cl_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="bottom|end"
        android:layout_margin="10dp"
        android:backgroundTint="@color/jietelan"
        android:clickable="true"
        android:focusable="true"
        android:src="@drawable/icon_t"
        app:borderWidth="@dimen/dp_4"
        app:elevation="@dimen/dp_8"
        app:fabSize="normal"
        app:pressedTranslationZ="@dimen/dp_16"
        app:rippleColor="@color/yase"/>

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

3.改变Snackbar外观
1).追踪一下源码:getView()

可以发现把Snackbar的跟布局返回出来了,是个FrameLayout,好了,可以肆无忌惮了

代码语言:javascript
复制
--> public View getView() {
        return mView;
    }
    
--> final SnackbarBaseLayout mView;

--> static class SnackbarBaseLayout extends FrameLayout
2).修改布局

snackbar自定义布局.gif

代码语言:javascript
复制
mFab.setOnClickListener(v -> {
    Snackbar snackbar = Snackbar.make(mClRoot, "Hello Snack", Snackbar.LENGTH_LONG);
    ViewGroup view = (ViewGroup) snackbar.getView();
    view.removeAllViews();//清除原来的View
    //加载布局
    View child = LayoutInflater.from(this).inflate(R.layout.item_of_base, view, false);
    view.addView(child);//添加自己的View
    snackbar.show();
});

三、底部抽屉:bottom_sheet

个人感觉向抽屉,放一些小的功能按钮上面的感觉会不错 bottom_sheet要在CoordinatorLayout里才能用 注:任何View都可以作为抽屉内容,下面以LinearLayout作为实验对象

BottomSheet.gif

1.抽屉内布局

behavior_hideable:是否可以完全淹没抽屉 layout_behavior:内置的bottom_sheet行为,不用动 behavior_peekHeight:要留多长的头在外面(也就是说,至少给个抽屉把手吧)

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/bottom_sheet"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:behavior_hideable="false"
    app:behavior_peekHeight="30dp"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:background="@color/transparent"
        android:src="@drawable/icon_up_3"/>

    <TextView
        style="@style/TVTestCenter"
        android:background="@color/feise"
        android:text="Sheet1"/>

    <TextView
        style="@style/TVTestCenter"
        android:background="@color/yase"
        android:text="Sheet2"/>

    <TextView
        style="@style/TVTestCenter"
        android:background="@color/zhuqing"
        android:text="Sheet3"/>

    <TextView
        style="@style/TVTestCenter"
        android:background="@color/yuebai"
        android:text="Sheet4"/>

</LinearLayout>
2.直接内嵌如CoordinatorLayout
代码语言:javascript
复制
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cl_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <include layout="@layout/sheet_4"/>
    
    //FloatingActionButton---同上
</android.support.design.widget.CoordinatorLayout>
3.状态监听
1).五种状态,见下:看动图应该挺清楚的
代码语言:javascript
复制
public static final int STATE_DRAGGING = 1;//手指接触正在移动
public static final int STATE_SETTLING = 2;//手指释放正在移动
public static final int STATE_EXPANDED = 3;//展开
public static final int STATE_COLLAPSED = 4;//收起
public static final int STATE_HIDDEN = 5;//隐藏

状态监听.gif

2).监听:BottomSheet
代码语言:javascript
复制
//成员变量
@BindView(R.id.bottom_sheet)
LinearLayout mBottomSheet;
private BottomSheetBehavior<LinearLayout> mBottomSheetBehavior;
    
mBottomSheetBehavior = BottomSheetBehavior.from(mBottomSheet);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
    @Override
    public void onStateChanged(@NonNull View bottomSheet, int newState) {
        ToastUtil.showAtOnce(FabSnaActivity.this, "newState:" + newState);
    }
    @Override
    public void onSlide(@NonNull View bottomSheet, float slideOffset) {
        L.d(slideOffset + L.l());//slideOffset:移动的分度值
    }
});

4.FloatingActionButton打开和关闭BottomSheet

sheet的控制.gif

代码语言:javascript
复制
//成员变量
private boolean isOpen;

mFab.setOnClickListener(v -> {
    if (isOpen) {
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
    } else {
        mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
    }
    isOpen = !isOpen;
});

四、BottomSheetDialog和BottomSheetDialogFragment
1.BottomSheetDialog

这个非常简单就三行,就是一个底部出来的Dialog,并且可以自定义布局

BottomSheetDialog.gif

代码语言:javascript
复制
 mFab.setOnClickListener(v -> {
     mBottomSheetDialog = new BottomSheetDialog(this);
     mBottomSheetDialog.setContentView(R.layout.a_pome_item);
     mBottomSheetDialog.show();
 });
2.BottomSheetDialogFragment

效果和上面一样,只不过这里是一个Fragment

BottomSheetDialogFragment

代码语言:javascript
复制
public class MyBSDFragment extends BottomSheetDialogFragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.a_pome_item, container, false);
    }

}
代码语言:javascript
复制
//使用:
new MyBSDFragment().show(getSupportFragmentManager(), "toly");

好了,基本上FloatingActionButton+Snackbar+SheetX3的用法都涉及了


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文把几个小东西讲一下
  • 一、FloatingActionButton
    • 1.基本认知
      • 2.常用属性
        • 3.使用:AppBarLayout+CoordinatorLayout篇的布局展示一下挂接
        • 二、Snackbar和FloatingActionButton联动
          • 1.代码实现:
            • 2.布局
              • 3.改变Snackbar外观
                • 1).追踪一下源码:getView()
                • 2).修改布局
            • 三、底部抽屉:bottom_sheet
              • 1.抽屉内布局
                • 2.直接内嵌如CoordinatorLayout
                  • 3.状态监听
                    • 1).五种状态,见下:看动图应该挺清楚的
                    • 2).监听:BottomSheet
                  • 4.FloatingActionButton打开和关闭BottomSheet
                  • 四、BottomSheetDialog和BottomSheetDialogFragment
                    • 1.BottomSheetDialog
                      • 2.BottomSheetDialogFragment
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档