Version:1.0 StartHTML:0000000179 EndHTML:0000079151 StartFragment:0000027429 EndFragment:0000079111 SourceURL:file:///Y:\Desktop\学习\新建文件夹\通知和消息.docx
消息框和对话框
Toast
简介:
Toast是在屏幕表面显示片刻的一条消息,它不会抢占用户焦点(或者暂停当前的activity),所以它不接收用户输入。
Toast通知是一条弹出显示在窗口表面的消息,它只占据足够显示消息内容的屏幕空间,并且用户当前的activity仍然保持可见和可操作。这个通知自动淡入淡出,并不接收交互事件。
可以从Activity或者Service创建并显示一条toast消息。如果你从Service创建一条toast消息,它会显示在当前焦点的activity之上。
用法:
1.Toast toast = Toast.makeText(context, text, Toast.LENGTH_SHORT;);
toast.show();
2.LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast_layout,
(ViewGroup) findViewById(R.id.toast_layout_root));
Toast toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
首先,通过getLayoutInflater()(或者getSystemService())取得LayoutInflater,然后用inflate(int, ViewGroup)从XML展开(inflate)布局layout。第一个参数是layout资源ID,第二个参数是根View。你可以使用这个布局来查找其内部更多的View对象。因此获得和定义ImageView和TextView元素的内容。最后,用Toast(Context)创建一个新的toast并设置属性,例如重心和持续时间。然后调用setView(View)并传入布局对象,你就可以通过show()来显示自定义布局的toast了。
Snackbar
简介:
Snackbar是Android支持库中用于显示简单消息并且提供和用户的一个简单操作的一种弹出式提醒。当使用Snackbar时,提示会出现在消息最底部,通常含有一段信息和一个可点击的按钮。
如何使用Snackbar:
Snackbar没有公有的构造方法,但是提供了静态方法make方法:
static Snackbar make(View view, CharSequence text, int duration)
static Snackbar make(View view, int resId, int duration)
其中view参数是用于查找合适父布局的一个起点,下面分析源码的时候会解释到。如果父布局是一个CoordinatorLayout,那么Snackbar还会有别的一些特性:可以滑动消除;并且如果有FloatingActionButton时,会将FloatingActionButton上移,而不会挡住Snackbar的显示。
在创建了一个Snackbar对象后,可以调用一些set**方法进行设置,其中setAction()方法用于设置右侧的文字显示以及点击事件,setCallback()方法用于设置一个状态回调,在Snackbar显示和消失的时候会触发方法。下面是一段创建Snackbar的代码:
Snackbar.make(view, "已删除一个会话", Snackbar.LENGTH_SHORT)
.setAction("撤销", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(Main2Activity.this, "撤销了删除", Toast.LENGTH_SHORT).show();
}
}).show();
Snackbar消失的几种方式
Snackbar显示只有一种方式,那就是调用show()方法,但是消失有几种方式:时间到了自动消失、点击了右侧按钮消失、新的Snackbar出现导致旧的Snackbar消失、滑动消失或者通过调用dismiss()消失。这些方式分别对应于Snackbar.Callback中的几个常量值。
- DISMISS_EVENT_ACTION:点击了右侧按钮导致消失
- DISMISS_EVENT_CONSECUTIVE:新的Snackbar出现导致旧的消失
- DISMISS_EVENT_MANUAL:调用了dismiss方法导致消失
- DISMISS_EVENT_SWIPE:滑动导致消失
- DISMISS_EVENT_TIMEOUT:设置的显示时间到了导致消失
Callback有两个方法:
void onDismissed(Snackbar snackbar, int event)
void onShown(Snackbar snackbar)
Snackbar.make(view, "已删除一个会话", Snackbar.LENGTH_SHORT).setAction("撤销", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
}).setCallback(new Snackbar.Callback() {
@Override
public void onDismissed(Snackbar snackbar, int event) {
switch (event) {
case Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE:
case Snackbar.Callback.DISMISS_EVENT_MANUAL:
case Snackbar.Callback.DISMISS_EVENT_SWIPE:
case Snackbar.Callback.DISMISS_EVENT_TIMEOUT:
//TODO 网络操作
Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
break;
case Snackbar.Callback.DISMISS_EVENT_ACTION:
Toast.makeText(MainActivity.this, "撤销了删除操作", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onShown(Snackbar snackbar) {
super.onShown(snackbar);
Log.i(TAG, "onShown");
}
}).show();
Dialog
对话框是提示用户作出决定或输入额外信息的小窗口,通常不会填充整个屏幕,用于进行一些额外交互
Dialog 类是对话框的基类,但应该避免直接实例化 Dialog,而应使用其子类,比如
- AlertDialog
此对话框可显示标题、提示信息、按钮、可选择项列表或自定义布局等
- DatePickerDialog 或 TimePickerDialog
此类对话框带有允许用户选择日期或时间的预定义 UI
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), 0);
builder.setTitle("提示")
.setMessage("确定继续?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
communicateInterface.positiveClicked();
dismiss();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
communicateInterface.negativeClicked();
dismiss();
}
});
Dialog dialog = builder.create();
Dialog.show();
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), 0);
builder.setTitle("提示")
.setView(getActivity().getLayoutInflater().inflate(R.layout.custom_view, null))
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
});
Dialog dialog = builder.create();
Dialog.show();