Material Design学习(三)——悬浮按钮和可交互提示

继续使用上篇文章的项目,拷贝一份并改名为day20_SuspendButton

一、FloatingButton

主布局:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fab"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:src="@drawable/done"/>
</FrameLayout>

悬浮按钮的颜色默认是corlorAccent,还可以设置悬浮高度:app:elevation

处理点击事件和普通按钮一样:

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this, "悬浮按钮被点击了", Toast.LENGTH_SHORT).show();
    }
});

在这里插入图片描述

二、Snackbar

Snackbar作为提示工具,可以为用户提供交互,使用方法和Toast类似,不过额外增加了一个按钮点击事件:

FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
//      Toast.makeText(MainActivity.this, "悬浮按钮被点击了", Toast.LENGTH_SHORT).show();
        Snackbar.make(v, "数据被删除了!", Snackbar.LENGTH_SHORT).setAction("别删呀", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "好吧,帮你恢复了", Toast.LENGTH_SHORT).show();
            }
        }).show();
    }
});

.make()创建了一个Snackbar对象,第一个参数是当前页面布局的任意一个view,他会自动查找最外层的布局来展示;第二个是用于展示的文字内容,第三个是时长。
.setAction()设置一个动作,从而使得可以交互
在这里插入图片描述

三、CoordinatorLayout

观察上面这个Gif,发现Snackbar会将悬浮按钮遮挡,这就需要借助CoodinatorLayout

CoodinatorLayout可以监听其子控件内的所有子控件的各种事件, 然后做出最合理的响应。 比如弹出的Snackbar提示遮挡了悬浮按钮,可以监听他的弹出事件,然后自动将FolatingActionButton向上偏移,从而不会被遮挡

使用方法也很简单,将原来的FrameLayout替换就行:

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:background="?attr/colorPrimary"
            android:layout_height="?attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/fab"
            android:layout_gravity="bottom|end"
            android:layout_margin="16dp"
            android:src="@drawable/done"/>
    </androidx.coordinatorlayout.widget.CoordinatorLayout>

运行:
在这里插入图片描述
思考:CoordinatorLayout可以监听所有子控件的事件,但SnackBar不是他的子控件,为什么能被监听到?
答案:Snackbarmake()方法第一个参数传入了FolatingAction,即Snackbar是基于FloatingAction触发的,而FloatingActionCoordinaLayout的子控件,所以可以监听到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章