Android中Dialog和Toast及其Snackbar的使用和区别

一.Snackbar的使用

连接地址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0714/3187.html
如果说Dialog和Toast是两个极端的话,那么Snackbar就是处于中间的位置了。Snackbar和Toast比较相似,但是用途更加广泛,并且它是可以和用户进行交互的。Snackbar使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。

在使用Snackbar之前,首先需要在app/build.gradle中添加相应的依赖:

dependencies {
compile ‘com.android.support:design:23.4.0’
}

然后就可以使用Snackbar了,它的用法和Toast是比较相似的:

Snackbar.make(view, “data deleted”,
Snackbar.LENGTH_LONG)
.setAction(“Undo”,
new View.OnClickListener(){
@Override
public void onClick(View v) {
}
})
.show();

这里调用Snackbar的make()方法来创建一个Snackbar对象,make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个view来自动查找最外层的布局,用于展示Snackbar。第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长。这些和Toast都是类似的。

接着这里又调用了一个setAction()方法来设置一个动作,从而让Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。

可以看到,Snackbar的效果有点类似于Toast,不过它是从屏幕底部弹出来的。另外Snackbar上面可以加入和用户交互的按钮,比如删除数据的时候给用户一个Undo的选项,从这些小的细节方面都可以提升很多的用户体验。

二.三者的区别总结

现在你有三种方式可以给用户提示信息,Dialog、Toast和Snackbar,下面我们对这三种方式的使用时机做个总结吧。

Dialog:当提示信息是至关重要的,并且必须要由用户做出决定才能继续的时候,使用Dialog。

Toast:当提示信息只是告知用户某个事情发生了,用户不需要对这个事情做出响应的时候,使用Toast。

Snackbar:以上两者之外的任何其他场景,Snackbar可能会是你最好的选择。

三.自定义Dialog的使用

**总体的思路就是:

  • 第一点:我么可以看做一个dialog是一个activity来理解,因为dialog可以自定义,自定义的时候,和anctivity很相似.
  • 第二点:我们通过setContetnView(view)来设置一个想要展示的view来作为自定义的dialog来展示出来.

-第三点:在设置自定义dialog的时候我们设置他的样式

**具体的操作:**

- * 初始化自定义对话框的展示属性:第一个属性是展示的宽度,我们可以获取展示的屏幕的宽度
DisplayMetrics displayMetrics=getcontex().getResourecs().getdisplaymetrices();这个类:Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。这个类中包含当前的宽度,获取displayMetrics.width;就是我们需要设置给自定义dialog的属性,最后自定义的对话框是展示在屏幕上面的,获取窗口的属性,设置dialog的属性;属性就包括对话框的展示的位置和对话框展示的宽度是怎么样子的.
- *获取窗口的属性:
WindowManager.LayoutParams params= getWindow().getAttributes();
- *设置位置 params.gravity = Gravity.bottom; 设置展示的位置
-*设置展示的宽度
params.width = displayMetrics.width;
-*参数变化后重新设置给我窗口
* getWindow()setAttributes(params)**

自定义dialog的代码:

`public class MykeyDialogDemo extends Dialog{
private Button mShow;
private Button mSend;
//首先是自定义对框的设置,第一点就是继承dialog
//里面的构造方法和一般的自定义控件是不相同的
//第一个参数实在直接new的时候获取的
//第二个参数是直接定义了一个style来设置的,我们在这里可以直接给自定义控件设置一个样式:样式中包包括的是背景和是自定义dialog
//是否是需要tittle后名就是在这行这个自定义的dialog的时候是的一些自定义的动画,注意我们常见的自定义dialog是宽和高都是固定好的
//我们需要自定义初始化对话框的高度和位置
//就在设置自定义对话框的样式扥那个构造方法里面来设定,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //转化一个view
    View view = View.inflate(getContext(), R.layout.mdialogshowview, null);
    setContentView(view);
    //初始化对话框的一些展示属性
    //获取屏幕的宽度,设置展示的屏幕的信息

//Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体。

    DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
    //获取框

    int widthPixels = metrics.widthPixels;
    // 获取窗口管理
    //在获窗口的属性
    //设置属性

    //将获取的屏幕的宽度设置给自定义对话框的展示

    //重新设置属性

    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.gravity= Gravity.BOTTOM;

    params.width=widthPixels;
    getWindow().setAttributes(params);
    //初始化控件:
    mShow = (Button) view.findViewById(R.id.btn_show_emotion);
    //获取发送
    mSend = (Button) view.findViewById(R.id.btn_send);


}

public MykeyDialogDemo(Context context) {
    this(context,R.style.CustomDialog);
    //好处就是,在获取自定义对话框的时候,代码获取的时候只传递一个上下文,而不能指定样式,我们在内部设置好了样式

}

public MykeyDialogDemo(Context context, int themeResId) {
    super(context, themeResId);
}

public MykeyDialogDemo(Context context, boolean cancelable, OnCancelListener cancelListener) {
    super(context, cancelable, cancelListener);
}

}`

Demo:地址:
https://github.com/NYK1024212458/CunstomDialogDemo.git

四.自定义Toast

参考图片:

连接地址: http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0302/945.html

你可能感兴趣的:(Android,Dialog,android,snackbar)