Material Design (三),Snackbar的使用

前言:

?另一个比较有趣的设计库中的UI组件是Snackbar,它的作用和Toast类似,显示吐司,但Snackbar的特别之处在于Snackbar显示的提示信息可以和用户交互,更好地获取用户反馈信息。同时,它显示的吐司带有动画效果,从屏幕下方慢慢展开显示。

引用设计库中的组件,需要引入相应的包:

dependencies {
    compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
    compile ‘com.android.support:appcompat-v7:23.0.1‘
    compile ‘com.android.support:design:23.0.1‘
}

1. 简单的Snackbar

?Snackbar使用很简单,一个简单的Snackbar的使用如下所示:

Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "I am Simple Snackbar", Snackbar.LENGTH_SHORT);
snackbar.show();

2. 带有动作反馈的Snackbar

Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "点击右边的反馈按钮", Snackbar.LENGTH_SHORT);
        snackbar.setAction("UNDO", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackbarActivity.this, "hello", Toast.LENGTH_SHORT).show();
            }
        });
snackbar.show();

调用Snackbar的setAction()方法,第一参数是点击按钮显示的文本,第二个当然是点击事件监听。

3. 自定义显示样式的Snackbar

?Snackbar是一个UI组件,它提供了一些接口(方法)让我们自定义显示样式:

Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "点击右边的反馈按钮", Snackbar.LENGTH_SHORT);
        snackbar.setAction("UNDO", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackbarActivity.this, "hello", Toast.LENGTH_SHORT).show();
            }
        });
// 改变右边反馈按钮字体颜色
snackbar.setActionTextColor(Color.YELLOW);

// 其实我们看到的提示信息是一个TextView(子类)
View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.BLUE);

snackbar.show();

3. 效果演示

为了演示上面的三种情况的Snackbar,写个测试的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <Button
        android:onClick="showSimpleSnackbar"
        android:layout_width="match_parent"
        android:text="simple sanckbar"
        android:layout_margin="20dp"
        android:layout_height="wrap_content">
    </Button>

    <Button
        android:onClick="showFeedbackSnackbar"
        android:layout_width="match_parent"
        android:text="with feedback snackbar"
        android:layout_margin="20dp"
        android:layout_height="wrap_content">
    </Button>

    <Button
        android:onClick="showCustomStyleSnackbar"
        android:layout_width="match_parent"
        android:text="Custom Style snackbar"
        android:layout_margin="20dp"
        android:layout_height="wrap_content">
    </Button>

</LinearLayout>

这个演示Activity的代码:

package com.example.lt.meterialdesign;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by lt on 2016/3/17.
 */
public class SnackbarActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_snackbar);
    }

    public void showSimpleSnackbar(View view) {
        Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "I am Simple Snackbar", Snackbar.LENGTH_SHORT);
        snackbar.show();
    }

    public void showFeedbackSnackbar(View view){
        Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "点击右边的反馈按钮", Snackbar.LENGTH_SHORT);
        snackbar.setAction("UNDO", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackbarActivity.this, "hello", Toast.LENGTH_SHORT).show();
            }
        });
        snackbar.show();
    }

    public void showCustomStyleSnackbar(View view){
        Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "点击右边的反馈按钮", Snackbar.LENGTH_SHORT);
        snackbar.setAction("UNDO", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackbarActivity.this, "hello", Toast.LENGTH_SHORT).show();
            }
        });
        // 改变右边反馈按钮字体颜色
        snackbar.setActionTextColor(Color.YELLOW);

        // 其实我们看到的提示信息是一个TextView(子类)
        View sbView = snackbar.getView();
        TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
        textView.setTextColor(Color.BLUE);

        snackbar.show();
    }

}

演示图片效果:

4. 结合CoordinatorLayout 和 FloatingActionButton展现不一样的风采

?设计库中的CoordinatorLayout 是一个让其子view之间的更好地交互的容器,比如:当Snackbar出现的时候,FloatingActionButton则会浮动显示在Snackbar,而不会发生控件重叠的现象。

activity_snackbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/coordinatorLayout"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:background="#00f"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:text="Snackbar"
            android:textSize="20sp"
            android:layout_margin="10dp"
            android:textColor="#fff"
            android:layout_height="wrap_content"/>
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:layout_marginTop="60dp"
        android:paddingRight="20dp"
        >

            <Button
                android:onClick="showSimpleSnackbar"
                android:layout_width="match_parent"
                android:text="simple sanckbar"
                android:layout_margin="20dp"
                android:layout_height="wrap_content">
            </Button>

            <Button
                android:onClick="showFeedbackSnackbar"
                android:layout_width="match_parent"
                android:text="with feedback snackbar"
                android:layout_margin="20dp"
                android:layout_height="wrap_content">
            </Button>

            <Button
                android:onClick="showCustomStyleSnackbar"
                android:layout_width="match_parent"
                android:text="Custom Style snackbar"
                android:layout_margin="20dp"
                android:layout_height="wrap_content">
            </Button>

    </LinearLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:layout_marginRight="20dp"
        android:src="@drawable/abc_ic_menu_cut_mtrl_alpha"
        app:fabSize="normal"
        app:layout_anchor="@id/coordinatorLayout"
        app:layout_anchorGravity="bottom|right|end"/>
</android.support.design.widget.CoordinatorLayout>

设计库中的一些组件用到了额外自定义的属性,所以需要引入相应的命名控件

SnackbarActivity.java

package com.example.lt.meterialdesign;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Created by lt on 2016/3/17.
 */
public class SnackbarActivity extends AppCompatActivity {

    private CoordinatorLayout mCoordinatorLayout;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_snackbar);
        mCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayout);
    }

    public void showSimpleSnackbar(View view) {
        Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "I am Simple Snackbar", Snackbar.LENGTH_SHORT);
        snackbar.show();
    }

    public void showFeedbackSnackbar(View view){
        Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "点击右边的反馈按钮", Snackbar.LENGTH_SHORT);
        snackbar.setAction("UNDO", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackbarActivity.this, "hello", Toast.LENGTH_SHORT).show();
            }
        });
        snackbar.show();
    }

    public void showCustomStyleSnackbar(View view){
        Snackbar snackbar = Snackbar.make(mCoordinatorLayout, "点击右边的反馈按钮", Snackbar.LENGTH_SHORT);
        snackbar.setAction("UNDO", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(SnackbarActivity.this, "hello", Toast.LENGTH_SHORT).show();
            }
        });
        // 改变右边反馈按钮字体颜色
        snackbar.setActionTextColor(Color.YELLOW);

        // 其实我们看到的提示信息是一个TextView(子类)
        View sbView = snackbar.getView();
        TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
        textView.setTextColor(Color.BLUE);

        snackbar.show();
    }

}

其他和上面都基本一样,就是把Snackbar.make()的一个参数换成了CoordinatorLayout对象的实例,这样才可以让CoordinatorLayout发挥其艺术般的交互效果。

运行效果图:

参考文章:http://www.androidhive.info/2015/09/android-material-design-snackbar-example/

参考文章:http://www.truiton.com/2015/06/android-snackbar-example/

时间: 2024-08-19 00:58:21

Material Design (三),Snackbar的使用的相关文章

Android(Lollipop/5.0) Material Design(三) 使用Material主题

官网地址:https://developer.android.com/intl/zh-tw/training/material/theme.html 新的Material主题提供了: 系统Widgets可设置它们的调色板 系统Widgets的触摸反馈动画 Activity的过渡动画 您可以自定义Material主题,根据你的品牌标识,用一个调色板来控制. 可以使用主题属性来为操作栏和状态栏着色,如图所示: Material主题的定义: @android:style/Theme.Material

Android(Lollipop/5.0) Material Design(四) 创建列表和卡片

Material Design系列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二) 入门指南 Android(Lollipop/5.0)Material Design(三) 使用Material主题 Android(Lollipop/5.0)Material Design(四) 创建列表和卡片 Android(Lollipop/5.0)Material Design(五) 定

Material Design: NavigationView FlaotingActionBar SnackBar采用

转载 请明确说明 MingsangAndroid 本文介绍了Design Support Library的引入 拥抱Android Design Support Library新变化(导航视图.悬浮ActionBar..).今天则重点介绍当中三个控件:NavigationView和 FloatingActionBar以及 SnackBar的基本使用方法. 本文代码地址:DesignSupportDemo 为了便于各位练习,这是代码中会用到的全部图片素材 图片素材.zip 作为三者的综合练习,我们

Android Material Design 系列之 SnackBar详解

SnackBar是google Material Design提供的一种轻量级反馈组件.支持从布局的底部显示一个简洁的提示信息,支持手动滑动取消操作,同时在同一个时间内只能显示一个SnackBar. 那Snackbar是如何实现的呢?我们主要讨论Snackbar的显示逻辑,包括:延迟消失和同一时间只支持一个Snackbar显示 首先我们先看下Snackbar用到的两个类 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "PingFang

新版MATERIAL DESIGN 官方动效指南(三)

运动 Material design 的动效会被类似真实世界中的力的影响,类似重力. 物体在屏幕内的运动 屏幕内物体在两点之间的运动,是沿着一条自然.凹陷的弧线.屏幕上所有的运动都可以使用标准曲线. 弧线向上运动 在现实世界中,物体向上运动需要克服重力.元素在屏幕中向上运动,同样也是需要克服一个加速度,较慢的向上运动. 正确:当物体向上对角运动时,平缓开始上升,急剧停止在终点. 错误:不要违反物理定律:当物体向上运动时无视重力,这样会显得不自然. 弧线向下运动 在现实世界中,物体下降会受到重力的

手把手教你打造一个Material Design风格的App(三)

--接上文. 3.2添加抽屉导航 添加导航抽屉跟Android 5.0之前是一样的,只是以前我们使用ListView来作为菜单容器,现在我们则使用Material Design风格的RecyclerView. (14)在你工程的java文件夹中,创建3个名为activity.adapter.model的包,将MainActivity.java移到activtiy包中,这样做使得你的代码可以很好地组织和管理. (15)打开位于app模块下的build.gradle文件并添加如下依赖.添加完依赖之后

Material Design系列第三篇——Using the Material Theme

Using the Material Theme This lesson teaches you to Customize the Color Palette Customize the Status Bar Theme Individual Views You should also read Material design specification Material design on Android The new material theme provides: System widg

Material Design控件使用学习 toolbar+drawerlayout+ Snackbar

效果 1.,导包design包和appcompat-v7 ,设置Theme主题Style为NoActionbar 2.custom_toolbar.xml <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns

Android控件使用 — 12个Material Design风格控件的使用

项目在GitHub上的地址: https://github.com/Hebin320/MaterialDesignUse 1.AppBarLayout.ToolBar AppBarLayout 是继承LinerLayout实现的一个ViewGroup容器组件,它是为了Material Design设计的App Bar,支持手势滑动操作. AppBarLayout必须作为Toolbar的父布局容器,也可以配合CoordinatorLayout一起使用. ToolBar是谷歌新推出的代替Action